0
私は以下のクラスを持っています。それぞれのコントロールクラスについて、プロパティを介してデータメンバーを公開したいと思います。C#の派生クラスとプロパティ
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クラスごとに1つのデータプロパティが公開されていますが、このプロパティの各クラスの名前が同じであることを希望します(Data
)。 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>
{
}
だからあなたがいる限り、あなたがT
の正しい一般的な引数を提供して(上書きまたは各誘導体でメンバーを隠し、まだ型の安全性を持っている必要はありません。
genericsを使用できませんか? 'BasicControlどこTData:BasicData'? –
Toxantron
私はジェネリックスに 'Control where T:BasicData'があり、' Data'が 'private T data;'となっています。 'AdvancedControl'は' class AdvancedControl:Control 'である。 –
http://stackoverflow.com/questions/5709034/does-c-sharp-support-return-type-covariance –