繁体   English   中英

C#中只读成员的get方法

[英]get method for a readonly member in C#

我有一个类定义,其中定义了一个只读成员。

private readonly Dictionary<string, string> map = new Dictionary<string, string>();

现在,为了测试我的设计,我想在其类定义之外访问此成员。 我当时想提供一种get方法,但无法编写无错误的语法。

是否可以将值分配给成员(使用new )并且仍然能够定义其get方法?

PS:我是C#语言的新手。

编辑:我还没有编写代码,它只是我从已经编写的模块中复制的一条语句。 我已经在模块中进行了一些设计更改,并希望以最小的代码更改来对其进行测试,因此,我一直在寻求在类之外获取该成员的只读访问权限。

您可以定义一个只读属性,以允许公共访问您的字段:

private readonly Dictionary<string, string> map = 
    new Dictionary<string, string>();

public Dictionary<string, string> Map
{
    get { return map; }
}

请注意,这只会阻止外部类更改分配给map的实例引用,而不会更改字典本身的内容。

有人可能会辩称,您不应该为课程的私人成员编写测试。 测试应该仅使用公共接口,而不应该依赖于类的内部,因为您应该能够重构类的内部而不会破坏任何测试。

如果添加“仅用于测试”的公共获取器,则不能保证有人会开始在项目中的某处使用。

如果您确实想公开该词典并使用.NET 4.5,请使用ReadOnlyDictionary类来确保调用者不会进行任何更改。

public IDictionary<string, string> Map
{
    get { return new ReadOnlyDictionary<string, string>(map); }
}

只需创建一个简单的吸气剂

public  Dictionary<string, string> Mapping
{
   get { return map; }
}

你的意思是这样的吗?

readonly Dictionary<string, string> _map = new Dictionary<string, string>();

public Dictionary<string, string> Map
{
    get { return _map; }
}

为什么要将此变量设置为readonly


如果您尝试授予字典中包含的值的访问权限,则可以创建一个公开字典而不允许对其进行修改的方法:

public string GetMapValue(string key)
{
    return _map[key];
}

您可以编写一个public属性函数以返回private readonly map ,例如:

public Dictionary<string, string> Map { { get { return map; } } }

但是,该Dictionary仍然是可变的。 如果您需要只读Dictionary ,请参阅此SO问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM