zoukankan      html  css  js  c++  java
  • Effective C# 学习笔记(二十六)防止返回类内部的对象引用

    有些时候,你不希望你的类型的属性因为外部引用而更改状态,对外只保持只读或有限的更改权限,这时有四种方法可以防止类内部对象被外部对象引用而引起更改。

    1. 值类型
    2. 不可变类型
    3. 接口
    4. 对象封装

     

    前两种只需选择正确的类型就好了,后面两种要写些代码来保证属性的访问权限。

     

    使用接口实现:

    记住一点,对于外界暴露类内部的属性值,要以接口的形式来暴露访问权限,而不要直接以类的形式来暴露。

    例如对于拥有BindingList<T>属性的类,对外只暴露IBindingList接口的非范型属性,或者暴露ICollection<T>的范型属性。代码如下:

    public class MyBusinessObject

    {

    // Read Only property providing access to a

    // private data member:

    private BindingList<ImportantData> listOfData = new BindingList<ImportantData>();

    public IBindingList BindingData

    {

    get { return listOfData; }

    }

    public ICollection<ImportantData> CollectionOfData

    {

    get { return listOfData; }

    }

    // other details elided

    }

     

     

    使用接口和对象包装来实现只读属性的访问权限控制。代码如下:

    public class MyBusinessObject

    {

    // Read Only property providing access to a

    // private data member:

    private BindingList<ImportantData> listOfData = new

    BindingList<ImportantData>();

    public IBindingList BindingData

    {

    get { return listOfData; }

    }

    public ReadOnlyCollection<ImportantData> CollectionOfData

    {

    get

    {

    return new ReadOnlyCollection<ImportantData>(listOfData);

    }

    }

    // other details elided

    }

     

    在实现上,可以使用权限标记属性来进一步控制某一属性的访问权限。

    举例来说,对于UI Control来说,其就是用 AddEdit,AllowNew,AlllowRemove等类的属性来控制外界对象对类内部的属性值的修改权限。

  • 相关阅读:
    排序之插入排序
    windows 连接 Linux 云服务器
    【Centos】搭建 SVN 服务器
    【微信小程序】scroll-view 的上拉加载和下拉刷新
    支付宝微信支付
    获取页面所有参数
    .net 比较两个日期大小
    .net json字符串转换为json对象
    .net 3des 解密
    .net xml转json
  • 原文地址:https://www.cnblogs.com/haokaibo/p/2107762.html
Copyright © 2011-2022 走看看