如何拥有ProblemBase<;TResult>;
本文关键字:lt TResult gt ProblemBase 何拥有 拥有 | 更新日期: 2023-09-27 18:06:51
可能重复:
如何创建从具有不同类型的同一泛型类继承的对象列表?
我使用了几个从抽象类继承的对象。但是要使用抽象类,必须声明一个泛型数据类型。
我遇到了问题,因为我需要一个包含ProbemBase列表的列表,尽管每个列表都包含不同的TResult数据类型。
public abstract class ProblemBase<TResult>
{
TResult[] Array;
}
我想得到Array属性。这就是问题所在。
这种事情对我来说经常发生。我通常使用的解决方案是为ProblemBase<T>
创建一个无类型的基类:
public abstract class ProblemBase
{
public abstract object Result { get; }
}
public abstract class ProblemBase<TResult> : ProblemBase
{
public override object Result
{
get { return Result; }
}
new public TResult Result { get; private set; }
}
每当您需要一个问题集合时,您就可以在不使用泛型的情况下创建一个ProblemBase
集合。
如果TResult
有自己所需的继承层次结构,那么您可以这样做:
public abstract class ProblemBase
{
public abstract ResultBase Result { get; }
}
public abstract class ProblemBase<TResult> : ProblemBase
where TResult : ResultBase
{
public override ResultBase Result { get { return Result; } }
new public TResult Result { get; private set; }
}