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等类的属性来控制外界对象对类内部的属性值的修改权限。

  • 相关阅读:
    使用SQL语句创建SQL数据脚本(应对万网主机部分不支持导出备份数据)
    js和jquery页面初始化加载函数的方法及先后顺序
    熔断器原理
    List<T>线性查找和二分查找BinarySearch效率分析
    ASP.NET资源大全-知识分享 【转载】
    C#语法——委托,架构的血液
    SUPERSOCKET 客户端
    VS 中的几种注释方法
    计算机专业术语中英文对照
    2018服务端架构师技术图谱
  • 原文地址:https://www.cnblogs.com/haokaibo/p/2107762.html
Copyright © 2011-2022 走看看