【发布时间】:2013-03-05 00:44:32
【问题描述】:
在泛型类中隐藏非泛型基类属性或方法的标准模式是什么?
我有 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; } }
}
【问题讨论】:
-
你能解释一下为什么在这里有泛型的目的吗?在 T 只能是一种类型的情况下,您可以使用 MyDataBase 类型并仍然将 MyDataBaseDerived 发送到构造函数。
-
@InfinitePossiblities:
T可以是从MyDataBase派生的任何类型。问题是如何将属性的返回类型改为T。 -
@pescolino 现在说得通了,谢谢!
标签: c# generics inheritance return-type