Edw*_*uay 0 c# generics inheritance
我有很多继承自的课程Item<T>.
每个类都有一个我想要进入的Create()方法Item<T>.
然而,以下代码获取错误" 无法创建变量类型'T'的实例,因为它没有new()约束 ":
T item = new T(loadCode);
Run Code Online (Sandbox Code Playgroud)
执行此操作的更正语法是什么?
public abstract class Item<T> : ItemBase
{
public static T Create(string loadCode)
{
T item = new T(loadCode);
if (!item.IsEmpty())
{
return item;
}
else
{
throw new CannotInstantiateException();
}
}
Run Code Online (Sandbox Code Playgroud)
这是不可能的.您只能使用new()约束来强制存在构造函数.
解决方法是将Func<InputType, T>(Func<string,T>在您的示例中)委托作为输入参数,为我们创建对象.
public static T Create(string loadCode, Func<string,T> construct)
{
T item = construct(loadCode);
if (!item.IsEmpty())
{
return item;
}
else
{
throw new CannotInstantiateException();
}
}
Run Code Online (Sandbox Code Playgroud)
并称之为: Item<T>.Create("test", s => new T(s));