• C#语言中字段和属性相关知识剖析


    针对C#中的字段和属性,很多初学者无法区分这两者之间的区别。

    字段与属性比较

    字段;是一种“成员变量”,一般在类的内部做数据交互使用,占用内存空间。

    属性:a.是一种逻辑变量,一般跟字段一起结合起来使用,是字段的扩展,并不占用实际的内存。

              b.属性其实就是外界访问私有字段的入口,属性本身不保存任何数据。在面向对象设计中主要使用属性描述对象的静态特征。

              c.属性设置过程中一般会用到get和set两个方法。可以在方法里加入逻辑处理数据,灵活拓展使用。

    标注:因为属性不占用实际内存,所以属性不能用于方法的ref类型参数

    下面举个栗子,如下所示

    public Class Student

    {

      private DateTime _Birthday;

       private string _Name;

      public string Name

      {

        get{return _Name;}

       set {this._Name=value;}

      }

     public int Age

    {

      get {return DateTime.Now.Year-this._Birthday.Year}

    }

    }

    在这个例子中,_Name是字段,而Name为属性,Name属性的get方法为返回学生的姓名,Set方法则是对_Name字段进行赋值。

    Age也是类中的一个属性,只不过这个属性是只读属性,get方法返回格式化之后的年龄数据,这就是使用属性很好的控制了返回数据的格式,不然还得专门写个方法去格式化数据。

    同时,属性也可以通过相应的条件对字段赋值进行相应的限制,比如我们要限定Student的名字长度最长不能超过5个字,超过5个字的,我们就只截取前面5个字符即可。

    为了实现这种效果,我们可以在set方法内做逻辑规则运算,即可轻松实现想要的效果,如下所示,设置Name属性为:

    Public string Name

    {

          get {return _Name}

          set

         {

                if(value.Length>5)

                        this._Name=value.Substring(0,5);

               else

                        this._Name=value;

         }

    }

    直接对字段赋值是无法达到上述效果,你需要在每次给字段赋值的时候,调用函数获取理想值。使用属性可以完美避免非法数据。

    使用属性的情况:

    • 要求字段只能读或者只能写;
    • 需要限制字段的取值范围;
    • 在改变一个字段的值的时候希望改变对象的其它一些状态; 

    使用字段的情况:

    • 允许自由读写;
    • 取值范围只受数据类型约束而无其他任何特定限制;
    • 值的变动不需要引发类中其它任何成员的相应变化。

    最后,附上我的ASP.NET学习群,欢迎各位同行入群指导交流。技术群:960640092

    更多文章可以关注博主个人站点:IT技术小趣屋博主公众号如下:

  • 相关阅读:
    FORM触发器执行顺序
    Invoke和BeginInvoke理解
    理解AppDomain
    BackgroundWorker学习笔记
    NLog类库使用探索——编程配置
    NLog类库使用探索——详解配置
    NLog类库的使用探索——认识配置+实习小感悟
    深入探讨WPF的ListView控件
    深入理解IOC模式及Unity框架
    网络通信之 字节序转换原理与网络字节序、大端和小端模式
  • 原文地址:https://www.cnblogs.com/xu-yi/p/10025735.html
Copyright © 2020-2023  润新知