在C#中,我们可以非常自由的、毫无限制的访问公有字段,但有时我们可能希望:
(1)限制只能给字段赋于某个范围的值;
(2)或是要求字段只能读或只能写;
(3)或是在改变字段时能改变对象的其他一些状态;
这些只靠字段是无法做到的,于是就有了属性。
属性中包含两个块:set和get,set块负责属性的写入工作,get块负责属性的读取工作。
在两个块中都可以做一些其他操作,如在set中验证赋的值是否符合要求并决定是否进行赋值。
set和get块中属性必需有一个,因为即不能读又不能写的属性是没有意义的。
下面举个简单的例子:
(1)属性可以保证安全,当不在本类中使用时,使用属性名可以避免用字段的名字。
1 class MyClass2 {3 private string name;4 public string Name5 {6 get {return name;}7 set {name=value;}8 }9 }
(2)属性的set和get函数可以限制字段的一些功能,以达到某种目的。
1 private int a=0; 2 public int A 3 { 4 get{return this.a;} 5 set 6 { 7 if(value >= 0 && value <= 100) 8 this.a=value; 9 else10 throw new Exception("值的范围不合法。");11 }12 }