关于C#中get和set(转)

转载 2013年12月05日 14:22:41

在程序中经常碰到get、set,不甚明白,在网上查询时也说的迷迷糊糊,所以整理下,以学的明白透彻点。

    有两个类person:

    public class person

    {

      public string name;

    }

    public class person

    {

      public string Name{set;get;}

    }

    第一个类型的name属性未封装,其name属性直接通过public关键字暴露给系统中的其他类了,而第二个类型的name属性通过get set关键字进行了封装,get和set分别对应的是可读和可写,相当于如下代码:

    private string name;

    public string Name

    {

      get { return name; }

     set { name = value; }

   }

    简单说下区别吧:当实例化第一个“person”这个类时,系统在分配内存空间时对name属性直接分配内存,之后对name属性的操作也是直接操作内存中name属性所在的这个块;而当实例化第二个“人”类型时,系统会先分配一个叫name的private私有的内存空间,之后的读与写的操作都是通过Name这个public的类似于指针的东西来关联name进行,以此达到封装的目的,并且通过get和set关键字也可以控制可读还是可写。建议用后者,封装的好处可以参考相关文档,不再累述了~

    至于get和set的作用,除了控制读写之外还有其他的作用,举个简单的例子,比如说当我给Name赋值的时候想要先进行一些逻辑判断,就可以这样:

        private string name;

        public string Name

        {

            get { return name; }

            set

            {

             name = String.IsNullOrEmpty(value) ? "空" : value;

            }

        }

 

再举例说明下:

    假设类是一银行,既能存钱也能取钱

    Private Money;

    Private class bank()

    {

      get

      {

         return Money;

      }

      Set

      {

         Money=value;

      }

    }

    Money 就像银行里的自动取款机,你看不见里面的Money,但你能用set(存钱),用get(取钱)。Money是一个私有字段,是分装在类中的,类以外的程序不能直接访问的。C#中get、set用法中,类的set和get成员是外部程序访问类内部属性的唯一方法,就像你去银行取钱,你不能直接从银行的保险柜里拿钱,而是银行营业人员把钱取出来给你的。

    属性在调用者看来就像一个普通的变量,但作为类的设计者,你可以利用属性来隐藏你类中的一些字段,使外界只能通过属性来访问你的字段,你可以通过属性来限制外界对你的字段的存取,就利用get、set。如果想让用户随意存取你的字段,那么就实现get、set;如果只想让用户读取字段,就只实现get;若只想让用户写字段就只实现set。同时还可以在set和get中对用户传递的值进行一些验证工作,以确保你的字段将含有正确的值。

    Private int a;

    Public int index

    {

      get

      {

        return a;

      }

      set

      {

         If (value>0)

           a=value;

         else

           a=0;

      }

    }

    可看出,get、set用法中一则是隐藏组件或类内部的真是成员;

    二是用来建立约束的,比如,实现“有我没你”这种约束;

    三是用来响应属性变化事件,当属性变化是做某事,只要写在set方法里就行。

    当你想读出或写入属性的值时,存取标志限定了被实现的语句。用于读出属性的值的存取标志记为关键字get,而要修改属性的值的读写符标志记为set。


原文地址:http://blog.sina.com.cn/s/blog_82526aa60100txtx.html


  属性与普通变量不同就在于, 普通变量就是放在屋子里的东西, 是什么样明明白白. 而属性则是在屋子的门口放了个守门人, 你拿东西放东西要经过他.。这个守门人就是属性访问器, 拿东西就是 get, 放东西就是 set. 怎么拿怎么放是它说了算, 虽然你觉得好像就是直接拿直接放差不多. 
    GET SET 就是对外的接口 ,一般在实例中访问成员数据需要这个成员数据的访问方式为PUBLIC ,现在C#很高级了,GET 就是获取,SET 就是设置,但是它提供了跟好的收缩性,对GET 和SET 可以单独设置访问权限 比如你对某个成员数据只能读取或者只写,或者只有派生类可以访问等。。。 相对以前来说,没有属性访问器,需要通过函数来调用私有成员数据,属性提供了高效的访问模式和简单的书写。
    就是为了安全啊~~
    字段是你具体要操作的数据所以他的值不能出错,可是你又不能避免用户犯错~~
 
    为了安全就用属性来给字段赋值,因为 在set中你可以对数据的安全进行验证,
    get就更简单了验证完数据了就要把值给了字段所以要get
    set的中文意思是“设置”;
    get的中文意思是“获得”;

    value 隐式参数,用于设置访问器以及添加或移除事件处理程序。

    对类的属性进行 设置
    比如用类名.属性=“”赋值 set作用
    变量=类名.属性 取值 get 作用


C#各种数据类型转json字符串(转贴)

C#各种数据类型转json字符串(转贴) 对象,数组,list等转json字符串函数

C#类成员-构造函数

       任何时候,只要创建类的实例,就会调用它的构造函数。类可能有多个接受不同参数的构造函数。构造函数使得程序员可设置默认值、限制实例化以及编写灵活且便于阅读的代码。 如果您没有为类提供构造函数...
  • dodream
  • dodream
  • 2009年09月28日 14:42
  • 6664

C# snmp get和set方法实现,含源码

  • 2016年11月22日 15:51
  • 232KB
  • 下载

C# get与set操作.rar

  • 2013年03月27日 15:35
  • 2KB
  • 下载

C# 属性和字段 get set

做了一年的asp.net的开发了,最近有一个疑问,在项目中经常用到实体类,每次写get set  ,我就有点不理解了,是不是吃多了没事情做,何必不把字段设置成public就行了,下面做了一个实验 cl...
  • houwc
  • houwc
  • 2015年07月22日 16:24
  • 602

C#中的GET和SET访问器

我们在学习C#语法的属性时,都要首先和GET,SET访问器打交道,从英文的字面意思上理解,GET应该就是获得什么什么,而SET应该是设置什么什么,那我们看一下,官方是怎么定义这对访问器的:get是读取...

【C#补习计划】get和set的作用

C#中get和SET,看来看去还是看不懂,通俗一点解释一下,用了有什么好处,不用会怎么样 如果你这样写是没有什么不一样的.  private int __Old;  public int Old{  ...

c#中get set 的使用

学习C#X遇到的对get set属性访问器的疑问。 摘抄自https://www.cnblogs.com/gallen-n/p/5502806.html c#在定义类时,通常要把类中声明的对象封装...

C# set和get如何用

C#语言有两个函数--一个赋值函数(get),一个取值函数(set),这从它生成的中间语言代码可以清晰地看到。C#不提倡将域的保护级别设为public而使用户在类外任意操作--那样太不OO,或者具体点...
  • ztzi321
  • ztzi321
  • 2014年05月25日 11:23
  • 578

C#反射(Reflection)对类的属性get或set值 .

近段时间,有朋友叫Insus.NET了解一下反射(Reflection)方面的知识,反射提供了封装程序集、模块和类型的对象(Type类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现...
  • xwygn
  • xwygn
  • 2013年08月04日 10:22
  • 574
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于C#中get和set(转)
举报原因:
原因补充:

(最多只允许输入30个字)