[英]C# override property with child/parent relationship
因此,基本上我想做的就是能够拥有一个属性名称空间,该属性名称空间可以被该属性的父项的子项覆盖。 这里的实际应用是维护模型/视图系统。 如果视图是从相同的基本视图类派生的,则某些视图需要使用更复杂的模型来执行其功能。
我想知道是否存在最佳实践模式,因为我目前仅隐藏变量名称空间的方法似乎太乱了。 这是我的意思的一些示例伪代码:
public class ParentPropertyType{
public string bar = "bar";
}
public class ChildPropertyType: ParentPropertyType{
public string foo = "foo";
}
public class ChildManager:ParentManager {
public virtual ChildPropertyType PropertyType {get; set;}
}
public class ParentManager{
public override ParentPropertyType PropertyType {get; set;}
}
...
Debug.Log(new ParentManager().PropertyType.foo);
似乎您应该使ParentManager
-class通用:
public class ChildManager : ParentManager<ChildPropertyType>
{
}
public class ParentManager<T> where T: ParentPropertyType
{
public T PropertyType { get; set; }
}
现在,您甚至不需要virtual
和override
,因为该属性根据使用的类具有正确的类型。因此,由于PropertyType返回ChildPropertyType的实例,因此可以很好地进行以下编译:
var manager = new ChildManager();
ChildPropertyType c = manager.PropertyType;
在C#中,无法重写方法并将其返回类型更改为后代类型。 “悲伤但真实”。
如果我是你,我将重新引入(使用“ new”)方法/属性以返回所需的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.