【发布时间】:2011-02-08 18:02:04
【问题描述】:
我正在尝试执行以下操作:
class Program
{
static void Main(string[] args)
{
foo<baz> fooObject = new foo<baz>();
AnotherClass<baz> _baz = new AnotherClass<baz>();
_baz.testMethod(fooObject);
}
}
public class AnotherClass<T> where T : bar
{
public void testMethod(foo<T> dummy)
{
foobar = dummy;
}
private foo<T> foobar = null;
}
public class foo<T> where T : bar, new()
{
public foo()
{
_t = new T();
}
private T _t;
}
public abstract class bar
{
public abstract void someMethod();
// Some implementation
}
public class baz : bar
{
public override void someMethod()
{
//Implementation
}
}
我收到一个错误,解释说“T”必须是具有公共无参数构造函数的非抽象类型才能将其用作泛型类型或方法中的参数“T”。我完全理解为什么必须这样做,并且也理解我可以将“T”类型的预初始化对象作为构造函数参数传递,以避免必须“新建”它,但是有什么办法解决这个问题吗?有什么方法可以强制从“bar”派生的类提供无参数构造函数?
已修复 - 我在 AnotherClass() 上缺少“new()”约束。
【问题讨论】: