簡體   English   中英

使用self作為泛型類型約束

[英]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>應該足以迫使FraudSingleton<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM