字段和属性的选择原则
1.优先使用属性
2.字段肯定是private
3.set和get访问器里面包含逻辑代码时,定义一个支持字段
4.除了3情况,其他情况都使用属性
5.通过1,2,3,4发现,仅存在两种情况:(1)仅使用自动属性 (2)显示定义支持字段,并为该字段提供带逻辑的属性。
自动属性
public string Name { get; set; } public int Age { get; set; }
C#编译器会自动创建字段,且提供默认值:0,“”, null,false。
访问级别不对等的get,set
public string Name { get; private set; }
我们可以在这个类的构造函数等其他函数中赋值或获取Name。在外界只能使用get。
只读属性
public string Name { get;}
只能在构造函数中为其赋值,类的其他函数只能get之。 在外界只能使用get。
接口属性
public interface ISampleInterface { // Property declaration: string Name { get; set; } }
接口属性的访问器没有正文。 因此,访问器的用途是指示属性为读写、只读还是只写。
-------------------------------------------------------------------------end-------------------------------------------------------------------------------------------------
属性的访问修饰符
对属性或索引器使用访问修饰符受以下条件的制约:
-
不能对接口或显式接口成员实现使用访问器修饰符。
-
仅当属性或索引器同时具有
set
和get
访问器时,才能使用访问器修饰符。 这种情况下,只允许对其中一个访问器使用修饰符。 -
如果属性或索引器具有 override 修饰符,则访问器修饰符必须与重写的访问器的访问器(如有)匹配。
-
访问器的可访问性级别必须比属性或索引器本身的可访问性级别具有更严格的限制。
重写属性或索引器时,被重写的访问器对重写代码而言必须是可访问的。 此外,属性/索引器及其访问器的可访问性都必须与相应的被重写属性/索引器及其访问器匹配。
将不带 set
访问器的属性视为只读。 将不带 get
访问器的属性视为只写。 将具有以上两个访问器的属性视为读写。
与字段不同,属性不会被归类为变量。 因此,不能将属性作为 ref 或 out 参数传递。
属性可以是读-写属性(既有 get
访问器又有 set
访问器)、只读属性(有 get
访问器,但没有 set
访问器)或只写访问器(有 set
访问器,但没有 get
访问器)。 只写属性很少出现,常用于限制对敏感数据的访问。
get
访问器必须以 return 或 throw 语句结尾,且控件不能超出访问器正文。
属性具有许多用途:它们可以先验证数据,再允许进行更改;可以在类上透明地公开数据,其中数据实际是从某个其他源(如数据库)检索到的;可以在数据发生更改时采取措施,例如引发事件或更改其他字段的值。
可以通过使用 static
关键字将属性声明为静态属性。 这使属性可供调用方在任何时候使用,即使不存在类的任何实例。