C#派生类和属性
我有以下课程。对于每个控件类,我希望通过属性公开数据成员C#派生类和属性,c#,polymorphism,C#,Polymorphism,我有以下课程。对于每个控件类,我希望通过属性公开数据成员 public class BasicData {} public class AdvancedData : BasicData { } public class BasicControl { private BasicData data; public BasicData DataHide; public virtual BasicData DataOverride; } public class Adva
public class BasicData {}
public class AdvancedData : BasicData { }
public class BasicControl
{
private BasicData data;
public BasicData DataHide;
public virtual BasicData DataOverride;
}
public class AdvancedControl: BasicControl
{
private AdvancedData data;
public new AdvancedData DataHide; //Hide
public override BasicData DataOverride; //Override
}
如果我将属性设置为虚拟,那么我的AdvancedControl
类必须将数据公开为BasicData
,而不是AdvancedData
(我更喜欢这样)
相反,我可以隐藏基类的属性,但我已经读到,应该尽可能避免隐藏
我希望每个控件类只公开一个数据属性,并且我希望该属性在每个类中具有相同的名称,即数据
。对于BasicControl
这应该是BasicData
。对于AdvancedControl
这应该是AdvancedData
要实现这一点,设计类的最佳方法是什么?您可以使用一种通用方法:
public class BasicData {}
public class AdvancedData : BasicData { }
public class BasiccControl<T> where T : BasicData
{
private T data;
public T Data;
}
public class AdvancedControl : BasicControl<AdvancedData>
{
}
公共类基本CDATA{}
公共类AdvancedData:BasicData{}
公共类BasicControl,其中T:BasicData
{
私有T数据;
公共数据;
}
公共类高级控件:基本控件
{
}
因此,您不需要重写或隐藏每个派生中的成员,并且仍然具有类型安全性(只要您为
t
提供正确的泛型参数)。您不能使用泛型吗BasicControl,其中TData:basiccdata
?我会使用泛型,在T:basiccdata中使用控件,并将数据作为私有T数据代码><代码>高级控制
将是类高级控制:控制