gpt4 book ai didi

c# - 为什么我不能强制派生类具有无参数构造函数?

转载 作者:太空狗 更新时间:2023-10-29 20:03:54 33 4
gpt4 key购买 nike

我正在尝试执行以下操作:

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”必须是具有公共(public)无参数构造函数的非抽象类型,才能将其用作泛型类型或方法中的参数“T”。我完全理解为什么必须这样,并且也理解我可以将类型为“T”的预初始化对象作为构造函数参数传递进来,以避免必须“新建”它,但是有什么办法可以解决这个问题吗?有什么方法可以强制派生自“bar”的类提供无参数构造函数?

已修复 - 我在 AnotherClass() 上缺少“new()”约束。

最佳答案

正确的语法是

public class foo<T> where T : bar, new()

关于c# - 为什么我不能强制派生类具有无参数构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2651709/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com