[英]Using self as a Generic Type Constraint
我對泛型類型相當陌生,但仍然嘗試着從以下聲明開始為Unity編寫泛型Singleton行為:
public abstract class Singleton<T> : MonoBehaviour where T : Singleton<T>{}
然后通過聲明兩個子類來立即對其進行測試:
public class Example : Singleton<Example> {}
public class Fraud : Singleton<Example> {}
我預計會出現錯誤,但這實際上已編譯。
據我了解, where T : Singleton<T>
應該足以迫使Fraud
從Singleton<Fraud>
派生,但顯然不是。
我怎么了?
實際上有沒有辦法實施這種約束?
public class Example : Singleton<Example> {}
對Singleton<T>
的約束是T : Singleton<T>
。 替換T := Example
,您將獲得約束Example : Singleton<Example>
,它之所以成立,是因為這就是我們聲明Example
。 沒有問題。
public class Fraud : Singleton<Example> {}
對Singleton<T>
的約束是T : Singleton<T>
。 替換T := Example
,您將獲得約束Example : Singleton<Example>
,它之所以成立,是因為這就是我們聲明Example
。 沒有問題。
我們沒有理由為Fraud
不有效,所以它是有效的。 畢竟,F約束多態性的重點是方法鏈接,您可以像在Example
上一樣在Fraud
上鏈接方法。 它可能做不到相同的事情,但是如果創建一個新的IDictionary
卻忽略了對Add
第二次調用,您將遇到相同的問題:您不能使用類型系統來強制執行所有操作(除非您是Coq ); 您不能總是阻止外部實體執行不應做的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.