我正在使用通用类型。我的问题是我需要有一个ProblemBase列表并获得Results属性,这可能吗?或者可以做些什么来解决这个问题?
public abstract class ProblemBase<TResult> : IProblem
{
public TResult[] Results { get; set; }
}
由于
答案 0 :(得分:0)
我不完全理解你的问题(问题基础列表?在哪里?)但我想你的问题可能是你不能“新” - 一个问题基础对象。这是因为这个类是抽象的。
根据你的其他问题,我猜你想要一个这个问题基础的集合,但有不同的通用参数。
当您实现IProblem-Interface时,我建议您使用它来制作IProblem-collection。如果您需要每个结果,那么也可以将tResult约束到接口(比如IResult),你甚至可以做到这一点。
答案 1 :(得分:0)
我想您可能会问如何创建通用接口?
public interface IProblem<T>
{
IList<T> Results { get; set; } // maybe even only a get; ?
}
public abstract class ProblemBase<T> : IProblem<T>
{
public IList<T> Results { get; set; }
}
答案 2 :(得分:0)
下面列出了不使用泛型接口的唯一方法,注意我建议你用一个更抽象的对象来改变数组:IEnumerable(然后你在C#4上协方差和逆变你的代码)。另一种方法可以使用通用接口,如IProblem&lt;&gt;
public abstract class ProblemBase<TResult> : IProblem
{
public IEnumerable<TResult> Results { get; set; }
IEnumerable IProblem.Results { get { return this.Results; } set { this.Results = value; } }
}
答案 3 :(得分:0)
您无法直接创建抽象类型的实例,您必须定义从抽象类型派生的新(非抽象)类型。然后实例化。然后,您可以将这些项添加到list / array / collection / whatever。
如,
public class MathProblem : ProblemBase<double>
{
}
var list = new List<IProblem> // better to be a list of the common interface
{
new MathProblem(), // now we can add to the list
};