EffectiveC#01--避免返回内部类对象的引用
2024-09-29 10:38:50
此篇是对00中第3点的再一次阐述。
1.如果一个属性返回一个引用类型,那么调用者就可以访问这个对象的公共成员,也包括修改这些属性的状态。
public class MyBusinessObject
{ // Read Only property providing access to a private data member:
private DataSet _ds;
public DataSet Data { get { return _ds; } }
}
// Access the dataset:
DataSet ds = bizObj.Data;
// Not intended, but allowed:
ds.Tables.Clear( );
2.很显然你想防止这样的事情发生,你有四个策略来保护你的内部数据结构不被无意的修改:值类型,恒定类型,接口和包装(模式)
值类型在通过属性访问时,是数据的拷贝。
恒定类型如System.String。你可以返回一个字符串或者其它恒定类型。
System.Dataset类使用了接口IListsource同时也使用了包装对象--DataViewManager类提供了一种访问DataSet的方法。
3.通过暴露接口来限制一些内部私有数据访问,或者包装对象。
你希望你的客户可以修改你的内部数据时,应该实现你自己的观察者模式,这样对象可以验证修改或者响应它们。
最新文章
- MySQL JDBC/MyBatis Stream方式读取SELECT超大结果集
- Hessian 初探
- 关于MySQL Connector/C++那点事儿
- jQuery 动态绑定的点击事件
- spring util命名空间
- Elasticsearch 5.0 _source field的简单认识
- 关于ajax后台success传来json数据的问题
- POJ-2240 Arbitrage---判断正环+枚举
- Ant Design Pro+Electron+electron-builder实现React应用脱离浏览器,桌面安装运行
- Kubernetes集群调度器原理剖析及思考
- Can't locate Params/Validate.pm in @INC (@INC contains: /usr/local/lib64/perl5 /
- 微信小程序托管 推广 开发 就找北京动点软件
- ct
- .net framework 4.5 +steeltoe+ springcloud(二) 实现服务发现与调用功能
- jquery异步ajax超大长度base64图片长字段数据传输问题解决办法和php后台处理办法
- JAVA 利用Dom4j实现英语六级词汇查询 含演示地址
- .net获取当前url各种属性(文件名、参数、域名、端口等)的方法(转)
- 使用镶嵌数据集 MosaicDataSet管理不同分辨率影像数据
- js里面函数的内部属性
- Silverlight &; Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效