(14)C# 基础—— 字段和属性

.NET C# Web开发学习之路(14)—— 字段和属性

字段

字段是一种数据成员,其中容纳了一个值类型或者一个引用类型的引用。一般在类的内部做数据交互使用。字段就好比我们的个人所有财产,仅供个人使用,所以一般是private修饰。

属性

属性是一种用于访问对象或类的特性的成员。属性具有访问器,这些访问器指定它们在的值被读写时需要执行的语句,因此属性提供了一种机制,即把读取和写入对象的某些特性与一些操作关联起来。可以像使用公共数据成员一样使用属性。

属性结合了字段和方法的多个方面。对于对象的用户,显示为字段,访问该属性仍需要完全相同的语法;对于类的实现者,属性是一个或两个代码块,表示一个get访问器和一个set访问器。读取时,执行get访问器的代码块;写入时,执行set访问器的代码块。

    注意:属性不能作为ref或out传递参数

属性一般用来在面向对象设计中描述对象的静态特征。属性其实就是外界访问私有字段的入口,属性本身不保存任何数据,在对属性赋值和读取的时候其实就是操作对应的私有字段。属性本质是一个方法,通过get和set来操作对应的字段。

属性的作用

  • 避免出现非法数据,例如一个年龄属性,正常逻辑年龄是不可以出现负数的,如果用户对哦年龄进行了负数的赋值,我们沟通过set方法加入判断逻辑,从而排除这种非法数据。

    private int age;
    public int Age
    {
        get { return age;}
        set
        {
            if(value < 0)
            {
                age = 18;
            }
            else
            {
                age = value;
            }   
        }
    }
    
  • 限定属性只读或者只写。例如有些属性为了保护数据,我们只能读取,不能赋值。具体使用根据需要屏蔽get或者set方法大道只读或者只写。

    private const double pi=3.14;
    public double Pi
    {
        get{return pi;}
    }
    
    //
    
    Student s = new Student();
    s.pi = 111;//运行程序,编译报错,无法对属性或索引器pi赋值,它是只读的
    

字段与属性的联系

有时候我们会比较矛盾,既然已经有了字段,为什么还要用属性呢?

如果在一个类中,有一个共有字段,那么在这个类的外部可一随便访问和使用这个字段,想怎么来就怎么来,一旦这个字段被赋了一个非常离谱的值,那么对程序可能会造成很大的影响。以前我在写代码的时候,没有注意到这一点,在类中只使用字段,而且还是public修饰的,没有使用属性来保护那些本来应该是类的私有的字段。

总结:

  • 属性对外:暴露数据,数据是可以存储在字段里的,也可以是动态计算出来的
  • 对内:保护字段不受“非法值”污染
  • 一般情况下,他们都用于表示实体(对象或者类型)的状态。
  • 属性大多数情况下是字段的包装器

建议:永远使用属性,而不是字段来暴露数据,即字段永远是private或者protected的

自动属性

编写属性的新语法(.NET 3.0 及以后版本)

private int age;
public int Age
{
    get{return age;}
    set{age = value;}
}
可以直接写成:
public int Age{get;set;}

注意:没有特定业务逻辑的属性都可以简写成自动属性,自动属性的格式不能更改。自动属性对应的字段由编译器自动生成。

猜你喜欢

转载自blog.csdn.net/qq_39003429/article/details/81910992