【发布时间】:2015-01-13 20:53:59
【问题描述】:
我编写了这个简化的代码来解释我面临的问题。我的问题在底部。
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 时,结果始终为 null。这是因为泛型类型 T 的实例化总是返回 null:
T 实例 = 新 T(); //->这就是问题所在,这每次都返回null
我尝试了不同的子类。我还尝试使用 Activator.CreateInstance() 而不是 new T()。但是在我从泛型类型 T 中删除 UnityEngine.Object 类约束之前,没有任何效果。像这样:
public abstract class Creator<T> : UnityEngine.Object where T : new()
{...}
就在那时,一切都按预期进行。
所以,我的问题是:
当泛型类型被限制为 UnityEngine.Object 的子类时,为什么泛型类型的实例化(使用无参数构造函数)返回 null?
【问题讨论】:
-
您的
MySingleton类型无法创建单例。根据定义,与它一起使用的每种类型都必须有一个公共构造函数,这意味着根据定义,您不能阻止创建多个实例。 -
感谢您指出这一点。
-
C#
new运算符只能返回非null值。请发布一个代码示例,显示您实际在做什么。见stackoverflow.com/help/mcve。 (Servy 的观点也是有效的,但如果我们摆脱你正在制作单例的想法,你似乎仍然有问题)。 -
感谢塞尔维和彼得。我编写了新代码以使我的问题更清楚。我也测试了该代码,但问题仍然存在
-
@NadiaCibrikova:您可能应该将您的评论转换为答案。