[转]asp.net中get和set用法-阿里云开发者社区

开发者社区> 嗯哼9925> 正文

[转]asp.net中get和set用法

简介:
+关注继续查看

    在早期学习c#的过程中,经常遇到这样的语句:

  1.  public string StudentName  
  2. {  
  3.            get{return stuName;}  
  4.            set{stuName=value;}  
  5. }   
  

      当时也不是很明白为什么要这样?学深了c#后,又没法对其做一个总结。今天看了《Visual c#.net程序设计教程》这本书,总结得不错,做下笔记:

      在许多面向对象程序设计语言中,属性(property)是指对象的特征和状态,具体地说就是指对象的数据成员。程序员可以指定数据成员能否被外界直接访问,如果数据成员被指定为public的,外界就可以用“对象名.公有数据成员名”访问该成员。c#是完全面向对象的语言,c#倡导一种新途径,对数据成员能够更好地封装和保护,同时又向外界提供更有效的访问形式。c#中用来达到这个目标的就是“属性”,而那些数据成员,在c#中称为“字段”或“域”。

      属性的定义和使用

      属性由两个部分组成:属性头和存储器。存储器分为get访问器和set访问器。声明属性的一般形式为:

      修饰符  类型  属性名

  1. public string propertyName          
  2. {  
  3.      get   //get存取程序  
  4.       {...}  
  5.      set   //set存取程序  
  6.       {...}  
  7. }  

      属性的修饰符可以是任何访问控制符(public/private/protected),还可以被定义为静态(static)。get和set是一种特定的方法,get用来从对象中读取数据,而set用来向字段写入数据,将外界的数据写入字段时,c#使用value表示输入的数据,value可以说是一个准关键字,例如:

  1. set{aField=value;}  

    以下是一个简单的例子,演示了属性的基本形式和用法:

  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.   
  6. namespace getset用法  
  7. {  
  8.     public class Student//学生类  
  9.     {  
  10.         //下面三个变量StruName,StuCollege,StuAge都是属性中的数据成员  
  11.         private string StuName = "xuwei";  
  12.         private string StuCollege = "CUGB";//  
  13.         private int StuAge = 24;  
  14.         public string studentNmae  
  15.         {  
  16.             /*get和set是一种特定的方法,get用来从对象中读取数据,而set用来向字段写入数据, 
  17.              * 将外界的数据写入字段时,c#使用value表示输入的数据,value可以说是一个准关键字,所以不需要声明value这个变量 
  18.              */  
  19.             get { return StuName;}  
  20.             set { StuName = value; }  
  21.         }  
  22.         public string studentCollege//学校名字不可改,所以没有set访问器,set用来修改studentCollege属性  
  23.         {  
  24.             get { return StuCollege; }  
  25.            // set { StuCollege = value; }  
  26.         }  
  27.         public int studentAge  
  28.         {  
  29.             get { return StuAge; }  
  30.             set { StuAge = value; }  
  31.         }  
  32.         public string studentInfo  
  33.         {  
  34.             get { return "name:" + studentNmae + "," + "school:" + studentCollege + "," + "age:" + studentAge; }  
  35.         }  
  36.     }  
  37.   
  38.     class Program  
  39.     {  
  40.         static void Main(string[] args)  
  41.         {  
  42.             Student stu = new Student();  
  43.             Console.WriteLine(stu.studentNmae);  
  44.             stu.studentNmae = "xuyanghong";//可直接赋值,这里的值就是相当于前面的 set { StuName = value; }  
  45.             Console.WriteLine(stu.studentNmae);  
  46.             stu.studentAge = 25;  
  47.             stu.studentNmae = "zhangchengrong";  
  48.             Console.WriteLine(stu.studentInfo);  
  49.         }  
  50.     }  
  51. }  

     上面代码中定义了一个属性studentName,它包含get访问器和set访问器。属性studentName封装了类Student中的字段 stuName,字段如果没有加访问控制符,被默认为private,外界不能直接访问它,现在外界可以通过studentName属性自由地存取 stuName字段了。

      属性的get和set都是可执行的程序语句组合,具有行为的特点;而使用具有get访问器和set访问器的属性时候就像使用字段一样,即可以作为左值接受数据,又可以作为右值输出数据,系统正是按照属性出现在语句中的位置,自动地选择是调用get还是调用set。

属性的读写控制

      属性中的get和set可以只用一个,如果只有get而没有set,那么这个属性只可读出,不可写入;如果只有set而没有get,那么这个属性是只写入,不可读出。

      在属性中完成更多功能

      既然get和set是程序,那当然可以做更多的事情。一个合理的分工是:设计字段是为了便于内部方法使用,而尽量与外界隔绝;设计属性考虑的是方便外界的使用,但是不让外界知道的数据一律不给。

总而言之:使用get和set能够让属性具有更好的封装性,而且既能够在等号的左边,又能在等号的右边。






本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2010/02/28/2297164.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
JAVA与C#比较 (如果你简历中提到C#和JAVA,面试如何回答?)
JAVA与C#比较 (如果你简历中提到C#和JAVA,面试如何回答?)
4 0
2020秋招面试JVM虚拟机高频问题总结 问题+答案(1)
2020秋招面试JVM虚拟机高频问题总结 问题+答案(1)
4 0
Visual Studio 2017 15.7 下的.NET Core
Visual Studio 2017 15.7版本发布,对.NET Core项目的主要相关改变如下, 同时对Xamarin、Android和iOS项目的支持上也做了较大改进。
8 0
ASP.NET Core: 十二.内置日志、使用Nlog将日志输出到文件(下)
应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用。   ASP.NET Core提供了内置的日志,但没弄明白这么把它输出到文件, 只能在VS的输出中查看, 谁知道怎么弄告诉我一下。
5 0
ASP.NET Core : 十三.httpClient.GetAsync 报SSL错误的问题
不知什么时候 ,出现了这样的一个奇怪问题,简单的httpClient.GetAsync("xxxx")居然报错了。
5 0
Spring框架学习 (一) 总体介绍
Spring框架学习 (一) 总体介绍
3 0
ASP.NET Core : 十.升级现有Core2.0 项目到2.1
.NET Core 2.1 终于发布了, 赶紧升级一下。
6 0
ASP.NET Core : 十一. 如何在后台运行一个任务(上)
在大部分程序中一般都会需要用到后台任务, 比如定时更新缓存或更新某些状态。
5 0
ASP.NET Core: 十二.内置日志、使用Nlog将日志输出到文件(上)
应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用。   ASP.NET Core提供了内置的日志,但没弄明白这么把它输出到文件, 只能在VS的输出中查看, 谁知道怎么弄告诉我一下。
4 0
ASP.NET Core : 十一. 如何在后台运行一个任务
在大部分程序中一般都会需要用到后台任务, 比如定时更新缓存或更新某些状态。
5 0
+关注
4716
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载