我有以下课程。对于每个控件类,我想通过属性公开数据成员。
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
(我更喜欢)。
我可以隐藏基类的属性,但我已经读过,应尽可能避免隐藏。
我想为每个Control类公开一个数据属性,我希望这个属性在每个类中都有相同的名称,即Data
。对于BasicControl
,这应该是BasicData
。对于AdvancedControl
,这应该是AdvancedData
。
设计我的课程以实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
您可以使用通用方法:
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>
{
}
因此,您不需要覆盖或隐藏每个派生中的成员,并且仍然具有类型安全性(只要您为T
提供正确的通用参数)。