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。 (塞維的觀點也是有效的,但是如果我們擺脫了單身的想法,你似乎仍然有問題)。 –