为什么在属性中设置private set

引言:  

  属性的引入来自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         }

参考:

  private set和不设置set的区别

  

原文地址:https://www.cnblogs.com/SharpL/p/4625612.html