簡體   English   中英

在C#中具有字典的獲取器和設置器

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM