我的一个类里有静态成员,这个类的实例方法要返回这个静态成员(因为在这个方法中要判断缓存中是否已经给静态成员赋值)给别的方法或直接返回静态成员给其他类,那么我在返回时,是直接返回静态成员还时返回静态成员的copy
静态成员用于内存中的缓存,生成这个静态成员时使用了Monitor.Enter我反编译了些代码学习,我看里面返回时常常使用copy,为什么要使用copy呢?
菜鸟一个,希望老大们百忙中回复一下,非常感谢!

解决方案 »

  1.   

    返回什么都可以。返回copy,通常是对引用类型的对象进行一定程度的保护,避免被使用者随意修改某些内容。所以只给一个copy。
      

  2.   

    例如在多线程的程序中,对于List<T>集合访问时经常会出现“集合已经被修改”的bug。如果你自己的程序已经测试好了,那么就不希望被未知的程序搞乱。于是,虽然你并不需要保护集合内的对象,但是你需要保护集合本身,就可以返回public List<ABC> GetDatas
    {
        get{ return MyDatas.ToList(); }
    }
    也就是在 List 之外再来重新生成 List。
      

  3.   

    非常感谢,看来还得返回copy,尽管可能浪费些时间,但能保证数据不被修改。