如何拥有ProblemBase<;TResult>;

本文关键字:lt TResult gt ProblemBase 何拥有 拥有 | 更新日期: 2023-09-27 18:06:51

可能重复:
如何创建从具有不同类型的同一泛型类继承的对象列表?

我使用了几个从抽象类继承的对象。但是要使用抽象类,必须声明一个泛型数据类型。

我遇到了问题,因为我需要一个包含ProbemBase列表的列表,尽管每个列表都包含不同的TResult数据类型。

public abstract class ProblemBase<TResult>
{
    TResult[] Array;
}

我想得到Array属性。这就是问题所在。

如何拥有ProblemBase<;TResult>;

这种事情对我来说经常发生。我通常使用的解决方案是为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; }
}