繁体   English   中英

C#覆盖具有子/父关系的属性

[英]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; }   
}

现在,您甚至不需要virtualoverride ,因为该属性根据使用的类具有正确的类型。因此,由于PropertyType返回ChildPropertyType的实例,因此可以很好地进行以下编译:

var manager = new ChildManager();
ChildPropertyType c = manager.PropertyType;

在C#中,无法重写方法并将其返回类型更改为后代类型。 “悲伤但真实”。

如果我是你,我将重新引入(使用“ new”)方法/属性以返回所需的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM