[英]getters and setters with dictionary in c#
我有以下家長課:
public class BaseType
{
public abstract Dictionary<string, object> dict { get; set; }
}
子班:
public override Dictionary<string, object> dict
{
get
{
return fn();
}
set
{
//set dictionary[key]=value }
}
fn
在子類中的實現方式為:
public static Dictionary<string, object> fn()
{
Dictionary<string, object> dictionary = new Dictionary<string, object>();
dictionary.Add("key1", "0");
dictionary.Add("key2", "something");
return dictionary;
}
我需要按以下方式訪問此dictionary
:
BaseType test=new Child();
test.dict["key1"]=1;//set property
object strGet= test.dict["key2];//get property
如何實現以上獲取和設置?
您的父班已經無效。 您不能具有接受參數的屬性。
您只能將字典公開為屬性本身。 請注意,您還需要使類抽象:
public abstract class BaseType
{
public abstract Dictionary<string, object> Dict { get; set; }
}
然后,在該類的子類型中,可以設置getter和setter,以便它返回一個自定義詞典:
public class MyType : BaseType
{
public override Dictionary<string, object> Dict
{
get
{
return GetSomeDictionary();
}
set
{
DoSomethingWith(value);
}
}
}
注意,這不允許您在執行someObj.Dict["key"] = "foo"
時覆蓋行為。 項目訪問器內置在字典類型中,您不能從類中覆蓋它。
您可以做的是公開一個IDictionary<string, object>
然后提供您自己的類型,該類型可以包裝普通字典,但可以公開所需的行為。
如果您的代碼的全部目的只是為字典提供一些默認值,那么您可以輕松解決此問題:
public class MyType : BaseType
{
private Dictionary<string, object> _dict = null;
public override Dictionary<string, object> Dict
{
get
{
if (_dict == null)
{
_dict = InitializeDictionary();
}
return _dict;
}
set
{
_dict = value;
}
}
}
其中InitializeDictionary()
返回具有默認值的新字典。
我知道了!! 這樣,我們可以動態設置字典中任何鍵的值。
public object objValue;
public string strKey;
public override Dictionary<string, object> dictionary
{
get
{
return fn();
}
set
{
setTest(strKey,objValue);
}
}
public void setTest(string strKey, object objValue)
{
dictionary[strKey] = objValue;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.