为什么这种泛型类型实例化的情况不起作用?
Why this case of generic type instantiation doesn't work?
我写了这个简化的代码来解释我面临的问题。我的问题在底部。
public abstract class Creator<T> : UnityEngine.Object
where T :UnityEngine.Object, new()
{
public static T CreateInstance()
{
T instance = new T(); // -> Here's the issue! always null
return instance;
}
}
public class ConcreteCreator : Creator<ConcreteCreator>
{
}
每当我调用 CreateInstance 时,结果始终为空。这是因为泛型类型 T 的实例化总是返回 null:
T 实例 = 新 T(); //->问题来了,这个returns每次都是null
我尝试了不同的子classes。我还尝试使用 Activator.CreateInstance() 而不是 new T()。但是 在我从通用类型 T 中删除 UnityEngine.Object class 约束之前,没有任何效果。像这样:
public abstract class Creator<T> : UnityEngine.Object where T : new()
{...}
就在这时,一切如期进行。
那么,我的问题是:
当类型被限制为 UnityEngine.Object 的子class 时,为什么泛型类型的实例化(使用无参数构造函数)返回 null?
显然 UnityEngine.Object
覆盖
==
运算符并假装为 null,即使它不是。参见 New UnityEngine.Object is Null
更多细节。
无论如何,它与泛型或 c# 无关。
我写了这个简化的代码来解释我面临的问题。我的问题在底部。
public abstract class Creator<T> : UnityEngine.Object
where T :UnityEngine.Object, new()
{
public static T CreateInstance()
{
T instance = new T(); // -> Here's the issue! always null
return instance;
}
}
public class ConcreteCreator : Creator<ConcreteCreator>
{
}
每当我调用 CreateInstance 时,结果始终为空。这是因为泛型类型 T 的实例化总是返回 null:
T 实例 = 新 T(); //->问题来了,这个returns每次都是null
我尝试了不同的子classes。我还尝试使用 Activator.CreateInstance() 而不是 new T()。但是 在我从通用类型 T 中删除 UnityEngine.Object class 约束之前,没有任何效果。像这样:
public abstract class Creator<T> : UnityEngine.Object where T : new()
{...}
就在这时,一切如期进行。
那么,我的问题是:
当类型被限制为 UnityEngine.Object 的子class 时,为什么泛型类型的实例化(使用无参数构造函数)返回 null?
显然 UnityEngine.Object
覆盖
==
运算符并假装为 null,即使它不是。参见 New UnityEngine.Object is Null
更多细节。
无论如何,它与泛型或 c# 无关。