Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何创建抽象泛型类的列表?_C#_Oop_Interface - Fatal编程技术网

C# 如何创建抽象泛型类的列表?

C# 如何创建抽象泛型类的列表?,c#,oop,interface,C#,Oop,Interface,可能重复: 我使用的是泛型类型。我的问题是我需要一个ProblemBase列表和GetResults属性,这可能吗?或者我们可以做些什么来解决这个问题 public abstract class ProblemBase<TResult> : IProblem { public TResult[] Results { get; set; } } 公共抽象类ProblemBase:IProblem { public TResult[]结果{get;set;} } 谢谢我不完

可能重复:

我使用的是泛型类型。我的问题是我需要一个ProblemBase列表和GetResults属性,这可能吗?或者我们可以做些什么来解决这个问题

public abstract class ProblemBase<TResult> : IProblem
{
    public TResult[] Results { get; set; }
}
公共抽象类ProblemBase:IProblem
{
public TResult[]结果{get;set;}
}

谢谢

我不完全理解您的问题(ProblemBase list?where?),但我猜您的问题可能是无法“新建”ProblemBase对象。这是因为类是抽象的

根据你的另一个问题,我猜你想要一个关于这个问题库的集合,但是有不同的泛型参数


在实现IProblem接口时,我建议您使用它来生成IProblem集合。如果您需要每个结果,那么也可以将tResult约束到一个接口(比如IResult),您甚至可以这样做。

我想您是在问如何创建一个通用接口,也许

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; }
}
公共接口问题
{
IList结果{get;set;}//甚至可能只是一个get?
}
公共抽象类ProblemBase:IProblem
{
公共IList结果{get;set;}
}

下面列出了不使用泛型接口的唯一方法,请注意,我建议您使用更抽象的对象更改数组:IEnumerable(然后在C#4上使用协方差和逆变换代码)。另一种方法可以使用像IProblem这样的通用接口

公共抽象类ProblemBase:IProblem
{
公共IEnumerable结果{get;set;}
IEnumerable IProblem.Results{get{返回this.Results;}set{this.Results=value;}}
}

不能直接创建抽象类型的实例,必须定义从抽象类型派生的新(非抽象)类型。然后举例说明。然后,您可以将这些项目添加到列表/数组/集合/任何内容中

e、 g

公共类数学问题:ProblemBase
{
}
var list=新列表//最好是公共接口的列表
{
new MathProblem(),//现在我们可以添加到列表中
};

你的单词说的是
列表
,但你的代码说的是
数组
。是哪一个,你认为你能描述一下你当前代码的问题吗?我的意思是,列表,从列表中,得到属性Results@Oscar:您是否正在尝试创建
列表
?你可以做到,没问题……我想你要找的术语是“协方差”和“逆变”
public abstract class ProblemBase<TResult> : IProblem
{
    public IEnumerable<TResult> Results { get; set; }

    IEnumerable IProblem.Results { get { return this.Results; } set { this.Results = value;  } }
}
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
};