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

  • 相关阅读:
    移动端高清、多屏适配方案
    Cookie存中文乱码的问题
    手机网站-前端开发布局技巧汇总
    深入理解javascript中的立即执行函数(function(){…})()
    test
    [PAT] A1013 Battle Over Cities (25分)
    PAT索引
    [PAT] A1012 The Best Rank
    [PAT] A1091 Acute Stroke
    [PAT] A1067 Sort with Swap(0, i)
  • 原文地址:https://www.cnblogs.com/haokaibo/p/2107762.html
Copyright © 2011-2022 走看看