具有私有添加方法或调整能力的 C# 字典

Jee*_*Jee 2 c# dictionary properties private

我正在尝试在具有私有 Add 方法/调整值的能力的类中创建一个字典。基本上,我希望能够从类外部访问它并查看其中的值,但我不希望任何人能够在不使用类中的方法的情况下更改与键关联的值。

我首先尝试创建一个作为字典的属性(这样我可以轻松地尝试使用 getter 和私有 setter 执行我想要的操作),但后来发现这完全不可能。

我知道可能有一种方法可以使用自定义方法或自定义单独的类来执行此操作,但我想首先检查此处,看看 C# 中是否有任何方法可以执行此操作。

让我知道你的想法。谢谢!

Chr*_*her 7

您可以使用IReadOnlyDictionary<TKey,TValue>- 它是所有 Dictionary 类都实现的接口

但如果这是您公开的 Propery 的类型,则没有Add()调用的函数。它有List和Collection“兄弟”,有着同样的待遇。

请注意,从技术上讲,有人仍然可以将其投射回Dictionary<TKey,TValue>,从而授予他们完全的读/写访问权限。除了安全应用程序之外,这对所有应用程序来说都不重要。如果有必要,只需分发您内部词典的克隆即可。

代码可能如下所示:

Dictionary<int, string> SecuredCollection = new Dictionary<int, string>();

public IReadOnlyDictionary<int, string> ThatDictionaryUsersCanOnlyRead
{
    get 
    {
        return SecuredCollection;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 正如他在答案中解释的那样,“IReadOnlyDictionary”没有要调用的“Add”函数(根据您对调用者无法添加值的要求)。如果您只是传回一个 Dictionary,它将具有您希望避免的“Add()”实现。通过在类中创建它,并将其仅公开为“IReadOnlyDictionary”,调用者将只能使用“IReadOnlyDictionary”提供的方法。 (4认同)