如何在继承的类中设置相同名称但不同类型的属性

时间:2017-02-09 08:59:22

标签: c# inheritance override

我可能错误地问了这个问题,但在这里坚持我。

我正在制作一个包含几条规则的配置管理器..所有Keys都是字符串,但Value可以是stringint,{{1 }或double(但显示为0,1整数)

我已经编写了一个类和一些通用的东西,并且还覆盖了bool方法来获得一个漂亮的打印模式。在包装器类中,我创建了一个操作符覆盖来获取对象。现在我正在尝试为该对象创建一个setter,但由于值的类型不匹配,我遇到了一些严重的麻烦。

ToString();

现在我怎样才能配置operator []的setter以使其实际正常工作,如果我输入,请说public class Config() { public List<ConfigEntry> ConfigLines {get;set;} public ConfigEntry this[string key] { get { if(CfgConfig.Any(x => x.GetKey(true) == key)) { return CfgConfig.Where(x => x.GetKey(true) == key).Single(); } if (ProfileConfig.Any(x => x.GetKey(true) == key)) { return ProfileConfig.Where(x => x.GetKey(true) == key).Single(); } return null; } set { //?????????????? } } public class ConfigEntry() { public string CommonStuff {get;set); public virtual string GetKey(bool tolower = false) { return null; } public override string ToString() { return CommonStuff; } public class TextValue : ConfigEntry { public string Key {get;set;} public string Value {get;set;} public override string ToString() { return $@"{Key}={Value};"; } public virtual string GetKey(bool tolower = false) { if (tolower) return Key.ToLower(); else return Key; } } public class IntValue : ConfigEntry { public string Key {get;set;} public int Value {get;set;} public override string ToString() { return $@"{Key}={Value};"; } public virtual string GetKey(bool tolower = false) { if (tolower) return Key.ToLower(); else return Key; } } } } ConfigLines["anintkey"] = 5;这两件事都有效..我想是的我确实需要在某处使用ConfigLines["astringkey"] = "Hello";,但是我没有使用太多的模板,我无法找到解决这个问题的方法。 我确实希望将原始列表保留为基类,然后从中开始工作,但我不知道如何解决这个问题。

谢谢大家的帮助!

1 个答案:

答案 0 :(得分:1)

您可以ConfigEntry<T>,但之后您将被迫制作包含Config<T>的{​​{1}}。所以这不是解决方案。

您只需要List<ConfigEntry<T>>

dynamic