C#派生类和属性

时间:2016-06-17 13:57:44

标签: c# polymorphism

我有以下课程。对于每个控件类,我想通过属性公开数据成员。

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

设计我的课程以实现这一目标的最佳方法是什么?

1 个答案:

答案 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提供正确的通用参数)。