我有以下父类:
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
如何实现上述获取和设置?
答案 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;
}