在c#中使用字典的getter和setter

时间:2015-11-20 10:55:13

标签: c# .net

我有以下父类:

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

如何实现上述获取和设置?

2 个答案:

答案 0 :(得分:2)

您的父类已无效。你不能拥有一个带参数的属性。

您只能将字典公开为属性本身。请注意,您还需要将类设为抽象:

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()返回带有默认值的新词典。

答案 1 :(得分:-3)

我懂了!!这样我们就可以动态设置字典中任何键的值。

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;
    }