为什么这种泛型类型实例化的情况不起作用

本文关键字:情况 不起作用 实例化 泛型类型 为什么 | 更新日期: 2023-09-27 18:37:11

我写了这个简化的代码来解释我面临的问题。我的问题在底部。

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>
{
}

每当我调用创建实例时,结果总是为空。这是因为泛型类型 T 的实例化始终返回 null:

T

实例 = new T();//->这就是问题所在,每次都返回 null

我尝试了不同的子类。我还尝试使用Activator.CreateInstance()而不是新的T()。但是在我从泛型类型T中删除UnityEngine.Object类约束之前,没有任何效果。喜欢这个:

public abstract class Creator<T> : UnityEngine.Object where T : new()
{...}

就在这时,一切都按预期进行。

所以,我的问题是:

为什么泛型类型的实例化(使用无参数构造函数)返回 null,而该类型被约束为 UnityEngine.Object 的子类?

为什么这种泛型类型实例化的情况不起作用

显然UnityEngine.Object覆盖 ==运算符并假装为 null,即使它不是。请参阅新的 UnityEngine.Object is Null了解更多详情。在任何情况下,它都与泛型或 c# 无关。