我正在尝试执行以下操作:
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
}
}
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,解释'T'必须是一个非抽象类型,带有一个公共无参数构造函数,以便在泛型类型或方法中将其用作参数'T'.我完全理解为什么这一定是,并且还明白我可以将一个类型为'T'的预初始化对象作为构造函数参数传递,以避免必须"新"它,但是有什么方法可以解决这个问题吗?任何方法来强制从'bar'派生的类来提供无参数构造函数?
修复 - 我在AnotherClass()上缺少'new()'约束.
你不是在你的AnotherClass上错过了一个new()约束吗?
public class AnotherClass<T> where T : bar, new()
Run Code Online (Sandbox Code Playgroud)
如果没有VS2010拒绝编译,那就可以了.