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