为什么在属性中设置private set
2015-07-06 22:38
197 查看
引言:
属性的引入来自C#的封装机制,也就是说对象的内部数据不应该由对象实例来直接访问,我们可以使用传统的Get和Set方法,来封装字段,C#为我们提供了语法糖,也就是属性。属性包括get和set,分别用来访问数据和修改数据,实际上编译器也同样会把属性编译成两个方法,但是在代码中经常会遇到private set的用法,代码如下:
为什么引入private set?
有时候,我们并不希望由实例对象在外部,轻松的修改内部字段的值,如t.Name="SharpL",目的是为了保护内部数据。
怎么实现的保护?
将set设置成为string,实际上也就是将set方法设置成了私有方法,C#中对象是无法访问类中的私有成员的,所以下面的代码将无法通过编译,如图:
如何修改数据呢?
通过构造函数,或者其他公共方法,代码如下:
参考:
private set和不设置set的区别
属性的引入来自C#的封装机制,也就是说对象的内部数据不应该由对象实例来直接访问,我们可以使用传统的Get和Set方法,来封装字段,C#为我们提供了语法糖,也就是属性。属性包括get和set,分别用来访问数据和修改数据,实际上编译器也同样会把属性编译成两个方法,但是在代码中经常会遇到private set的用法,代码如下:
public class Test { private string name; public string Name { get { return name; } private set { name = value; } } }
为什么引入private set?
有时候,我们并不希望由实例对象在外部,轻松的修改内部字段的值,如t.Name="SharpL",目的是为了保护内部数据。
怎么实现的保护?
将set设置成为string,实际上也就是将set方法设置成了私有方法,C#中对象是无法访问类中的私有成员的,所以下面的代码将无法通过编译,如图:
如何修改数据呢?
通过构造函数,或者其他公共方法,代码如下:
public Test() { name = "SharpL"; } public void DoSth() { name = "LSharp"; }
参考:
private set和不设置set的区别
相关文章推荐
- ACCESS数据库字符串连接方式
- android入门学习-学习规划
- 华为机试题记录1
- 【剑指offer 面试题23】从上往下打印二叉树
- UITableView启动后自动设置滚动的位置
- 正处于尴尬的年纪
- Android入门(14)——使用Spinner实现下拉列表
- 超级台阶
- Spring事务原理
- 超级台阶
- iOS7中的多任务
- 键值表
- java面向对象编程基本概念
- perl 面向对象 -> 符号使用
- 2.2 Zend_Controller 基础
- 每天一道算法题(19)——最近公共父节点问题
- 每天一道算法题(19)——最近公共父节点问题
- 3-EM的安装和使用
- javaSE学习笔记之线程
- 2. Zend_Controller 快速入门