繁体   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