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数据<代码>高级控制
将是
类高级控制:控制