C#中的属性和字段

时间:2022-01-04 14:52:21

 

  • 属性和字段的区别

     在C#中,我们可以*的访问公有字段,但在一些场合中,我们可能希望限制字段的赋值范围、或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些字段值,这些单靠字段是无法做到的,于是就有了属性,属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作。

  • 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对于类的内部使用,Name对于外部操作使用,要有所区分),之后的读与写的操作都是通过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中对用户传递的值进行一些验证工作,以确保你的字段将含有正确的值。

  综上使用get,set把字段封装为属性可以实现以下几点:

  1.    对字段进行保护----类外部不能直接访问字段的内存
  2.    对字段读写进行限制-----只允许读或者只允许写
  3.    在对字段赋值取值时做一些操作