[英]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.