簡體   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