c#中带有dictionary的getter和setter
本文关键字:getter setter dictionary | 更新日期: 2023-09-27 18:22:46
我有以下父类:
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;
}