属性和字段的区别

来源:互联网 发布:开淘宝网店需要的软件 编辑:程序博客网 时间:2024/06/04 19:41

1、字段

(参照MSDN介绍“字段(C# 编程指南)”)

    “字段”是直接在类或结构中声明的任何类型的变量。 字段是其包含类型的“成员”。

    类或结构可以拥有实例字段或静态字段,或同时拥有两者。 实例字段特定于类型的实例。 如果您拥有类 T 和实例字段 F,可以创建类型 T 的两个对象,并修改每个对象中 F 的值,这不影响另一对象中的该值。 相比之下,静态字段属于类本身,在该类的所有实例中共享。 从实例 A 所做的更改将立刻呈现在实例 B 和 C 上(如果它们访问该字段)。

    通常应仅为具有私有或受保护可访问性的变量使用字段。 您的类向客户端代码公开的数据应通过方法、属性和索引器提供。 通过使用这些构造间接访问内部字段,可以针对无效的输入值提供防护。 存储由公共属性公开的数据的私有字段称为“后备存储”或“支持字段”。

    字段通常存储这样的数据:该数据必须可供多个类方法访问,并且其存储期必须长于任何单个方法的生存期。 例如,表示日历日期的类可能有三个整数字段:一个表示月份,一个表示日期,还有一个表示年份。 不在单个方法范围外部使用的变量应在方法体自身范围内声明为局部变量。

    在类块中通过指定字段的访问级别,然后指定字段的类型,再指定字段的名称来声明这些字段

    字段可标记为 public、private、protected、internal 或 protected internal。 这些访问修饰符定义类的使用者访问字段的方式。 有关更多信息,请参见访问修饰符(C# 编程指南)

    可以选择将字段声明为 static。 这使得调用方在任何时候都能使用字段,即使类没有任何实例。 有关更多信息,请参见 静态类和静态类成员(C# 编程指南)

    可以将字段声明为 readonly。 只读字段只能在初始化期间或在构造函数中赋值。 static readonly 字段非常类似于常数,只不过 C# 编译器不能在编译时访问静态只读字段的值,而只能在运行时访问。 有关更多信息,请参见 常量(C# 编程指南)

    注意:字段初始值设定项不能引用其他实例字段。

2、属性

     (1)属性其实就是对私有字段的读取和写入,以便做些公有字段无法完成的任务,他的使用方式和公有字段完全一样,所以可以理解成属性是为了满足对公有字段的特殊需求而产生的附属品。因而当我们选择使用属性还是使用字段时,主要看需求,如果不需设置访问权限、不需在赋值时检测值是否满足要求、不需要在赋值时修改对象其他一些状态等特殊的需求时,使用公有字段即可,否则就使用属性。

    (2)属性没有存储数据的功能,数据都存在字段中,所以只有修改字段的数据才能更改数据,修改属性的值没用。


3、属性只有set;get;,没有对应的私有字段

属性声明方式分为常规属性和自动实现属性。

    (1)常规属性:包括一个私有字段,一个get访问器,一个set访问器3个部分。

private string _sName;public string sName{  get  {return _sName;}  set  {_sName = value; }}

    (2)自动实现的属性:属性声明中只有{get;set;},没有对应的私有字段,且属性访问器使用简洁声明方式,没有逻辑处理。这里编译器会自动创建一个私有的匿名后备字段,该字段只能通过属性的 get 和 set 访问器进行访问。

public string Name {get;set;}

4、属性和字段在类的内部使用

    (1)私有字段的话只能在类的内部访问;属性的话做了一次取值的过程(从对应的私有字段中取值)。因此在类的内部应该用私有字段,避免了一次转换的过程,提高了效率。

    (2)在类的内部中也可以使用属性,效果相差不大。

    (3)私有字段是内部用的,属性是对外部类暴露的,并可以设置一定的限制,从某种意义上讲,属性就像方法。


原创粉丝点击