引言:
属性的引入来自C#的封装机制,也就是说对象的内部数据不应该由对象实例来直接访问,我们可以使用传统的Get和Set方法,来封装字段,C#为我们提供了语法糖,也就是属性。属性包括get和set,分别用来访问数据和修改数据,实际上编译器也同样会把属性编译成两个方法,但是在代码中经常会遇到private set的用法,代码如下:
1 public class Test 2 { 3 private string name; 4 public string Name 5 { 6 get { return name; } 7 private set { name = value; } 8 } 9 }
为什么引入private set?
有时候,我们并不希望由实例对象在外部,轻松的修改内部字段的值,如t.Name="SharpL",目的是为了保护内部数据。
怎么实现的保护?
将set设置成为string,实际上也就是将set方法设置成了私有方法,C#中对象是无法访问类中的私有成员的,所以下面的代码将无法通过编译,如图:
如何修改数据呢?
通过构造函数,或者其他公共方法,代码如下:
1 public Test() 2 { 3 name = "SharpL"; 4 } 5 6 public void DoSth() 7 { 8 name = "LSharp"; 9 }
参考: