0
我写了这个简化的代码来解释我面临的问题。我的问题在底部。为什么这种泛型类型实例化不起作用?
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 instance = new T(); // - >这是问题所在,每次都返回空值
我试过不同的子类。我也尝试使用Activator.CreateInstance()而不是新的T()。但是没有任何工作,直到我从通用类型T中删除UnityEngine.Object类约束。像这样:
public abstract class Creator<T> : UnityEngine.Object where T : new()
{...}
就在这时,一切都按预期工作。
所以,我的问题是:
为什么泛型类型(使用参数的构造函数)返回null的实例,当类型被约束为UnityEngine.Object的子类?
您的MySingleton类型无法创建单例。每个与它一起使用的类型都必须定义一个公共构造函数,这意味着根据定义,您不能阻止创建多个实例。 – Servy
谢谢你指出。 – Lio
C#'new'运算符只能返回一个非'null'值。请发布代码示例,显示您实际在做什么。请参阅https://stackoverflow.com/help/mcve。 (塞维的观点也是有效的,但是如果我们摆脱了单身的想法,你似乎仍然有问题)。 –