[英]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.