【发布时间】:2010-04-30 17:25:01
【问题描述】:
以下代码编译失败,产生“Widget 必须是具有公共无参数构造函数的非抽象类型”错误。我认为编译器拥有它需要的所有信息。这是一个错误吗?疏忽?还是在某些情况下这是无效的?
public class Factory<T> where T : new()
{
public T Build()
{
return new T();
}
}
public class Widget
{
public Widget(string name = "foo")
{
Name = name;
}
public string Name { get; set; }
}
public class Program
{
public static void Main()
{
var widget = new Widget(); // this is valid
var factory = new Factory<Widget>(); // compiler error
}
}
【问题讨论】:
-
分页 Eric Lippert.... 我认为这将归结为可选参数是编译器功能,但通用约束是 CLR。因此编译器替换了可选参数,而 JIT 只看到(必需的)参数。
-
@Richard:这基本上就是这里的问题。由于这个原因,可选参数对版本控制也有一些奇怪的副作用......
标签: generics c#-4.0 optional-parameters