这个散列表不应该只读吗?

Cou*_*phy 0 c# hashtable getter-setter

我有一个类,它有一个名为_Parameters的哈希表的getter函数.

private Hashtable _Parameters = new Hashtable();
public Hashtable Parameters { get { return _Parameters; } }
Run Code Online (Sandbox Code Playgroud)

_Parameters未在代码中的任何其他位置引用.现在,由于没有setter函数,我认为这个类之外的任何东西都不能修改_Parameters存储的内容,只能读取它.然而事实并非如此.另一个类调用此代码(其中template是上面提到的类的实例)

template.Parameters[key] = parameters[key];
Run Code Online (Sandbox Code Playgroud)

这最终修改了_Parameters.这怎么可能?如果我们使用'='分配vales,setter函数是否只适用?

Cla*_*sen 5

不.您正在返回一个可以修改的引用.但是你不能覆盖引用本身.

考虑使用ReadOnlyDictionary<TKey, TValue>替代.

考虑阅读不可变对象.它应该向你解释这个问题.