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