ジェネリック クラスで非ジェネリックな基本クラスのプロパティまたはメソッドを非表示にするための標準パターンは何ですか?
私は実際には同じですが異なるアプローチを行う2つの解決策を持っています。解決策 1 は、基本クラスと派生クラスが同じオブジェクトを参照するため、より多くのメモリを使用します。また、解決策 2 は、キャストが原因で遅くなります (または、間違っている可能性があります)。
基本クラス:
public class MyDataBase {}
public class MyDataDerived : MyDataBase {}
public class BaseFoo
{
private readonly MyDataBase _data;
public MyDataBase Data { get { return _data; } }
public BaseFoo(MyDataBase data) {
_data = data;
}
}
解決策 1:
public class GenericFooWithHiding<T> : BaseFoo where T : MyDataBase
{
private readonly T _data;
public GenericFooWithHiding(T data) : base(data) { _data = data; }
public new T Data { get { return _data; } }
}
解決策 2:
public class GenericFooWithCasting<T> : BaseFoo where T : MyDataBase
{
public GenericFooWithCasting(T data) : base(data) {}
public new T Data { get { return base.Data as T; } }
}