C#中的变量、字段、域、属性、属性过程

    技术2024-12-05  25

    源地址:http://apps.hi.baidu.com/share/detail/358711

     

    在C#中:

         域:      表示与对象或类相关联的变量,修饰符不论是不是public。(与字段类似)    字段:   表示与对象或类相关联的变量。通常来讲修饰符是public的成员变量称为字段,而private更适合说是局部变量。(与域类似)    属性:   表示域或字段的自然扩展,使得在保证封装性的基础上实现了访问私有成员的便捷性。

    域表示与对象或类相关联的变量,声明格式如下:

    attributes field-modifiers type variable-declarators;

        域的修饰符field-modifiers可以是:new、public、protected、internal、private、static、readonly。实际上,域相当于C++中的简单成员变量。在下面的代码中,类A包含了三个域:公有的X和Y,以及私有的z。class A{public int x;public string y;private float z;}

    字段

        字段是与对象或类相关联的变量。       当一个字段声明中含有static修饰符时,由该声明引入的字段为静态字段(static   field)。它只标识了一个存储位置。不管创建了多少个类实例,静态字段都只会有一个副本。       当一个字段声明中不含有static修饰符时,由该声明引入的字段为实例字段(instance   field)。类的每个实例都包含了该类的所有实例字段的一个单独副本。      在下面的示例中,Color类的每个实例都有r,g,b实例字段的不同副本,但是Black,White,Red,Green和Blue等静态字段只有一个副本:   public   class   Color   {           public   static   readonly   Color   Black   =   new   Color(0,   0,   0);           public   static   readonly   Color   White   =   new   Color(255,   255,   255);           public   static   readonly   Color   Red   =   new   Color(255,   0,   0);           public   static   readonly   Color   Green   =   new   Color(0,   255,   0);           public   static   readonly   Color   Blue   =   new   Color(0,   0,   255);                     private   byte   r,   g,   b;                     public   Color(byte   r,   byte   g,   byte   b)   {                 this.r   =   r;                 this.g   =   g;                 this.b   =   b;           }   }       如示例所示,通过readonly修饰符声明只读字段。给readonly字段的赋值只能作为声明的组成部分出现,或者在同一类中的实例构造函数或静态构造函数中出现。 

    属性

        为了类的封装性,一般是把字段设为Private, 把属性设为公有来操作字段。  

        属性(property)是字段的自然扩展,两者都是具有关联类型的命名成员,而且访问字段和属性的语法是相同的。然而,属性与字段不同,不表示存储位置。相反,属性有访问器(accessor),这些访问器指定在它们的值被读取或写入时需执行的语句。     属性的声明类似于字段,不同之处在于属性的声明以定界符{}之间的get访问器和/或set访问器结束,而不是分号。同时包含get访问器和set访问器的属性称为读写属性(read-write   property)。只具有get访问器的属性称为只读属性(read-only property)。只具有set访问器的属性称为只写属性(write-only property)。       get访问器相当于一个具有属性类型返回值的无参数方法。除了作为赋值的目标外,当在表达式中引用属性时,会调用该属性的get访问器以计算该属性的值。       set访问器相当于一个具有单个名为value的参数和无返回类型的方法当一个属性作为赋值的目标,或者作为++或--运算符的操作数被引用时,就会调用set访问器,所传递的自变量将提供新值。   List类声明了两个属性Count和Capacity,依次是只读和只写的。下面是使用这些属性的示例:  List   names   =   new   List();   names.Capacity   =   100;                     //调用set访问器   int   i   =   names.Count;                       //调用get访问器   int   j   =   names.Capacity;               //调用get访问器  

        与字段和方法类似,对于实例属性和静态属性,C#两者都支持。静态属性是声明中具有static修饰符,而实例属性则没有。      属性的访问器可以是虚拟的。当属性声明中包含virtual,abstract,override修饰符时,它们将运用到属性访问器。

     

        来自MSDN中的内容:

    属性与字段 属性与字段都可在对象中存储和检索信息。它们的相似性使得在给定情况下很难确定哪个是更好的编程选择。在以下情况下使用属性过程:    1. 需要控制设置或检索值的时间和方式时。   2. 属性有定义完善的一组值需要进行验证时。   3. 设置值导致对象的状态发生某些明显的变化(如 IsVisible 属性)。   4. 设置属性会导致更改其他内部变量或其他属性的值时。   5.必须先执行一组步骤,然后才能设置或检索属性时。在以下情况下使用字段:    1. 值为自验证类型时。例如,如果将 True 或 False 以外的值赋给 Boolean 变量,就会发生错误或自动数据转换。   2. 在数据类型所支持范围内的任何值均有效时。Single 或 Double 类型的很多属性属于这种情况。   3. 属性是 String 数据类型,且对于字符串的大小或值没有任何约束时。

    最新回复(0)