C# 将self用作泛型类型约束

C# 将self用作泛型类型约束,c#,generics,unity3d,singleton,C#,Generics,Unity3d,Singleton,我对泛型类型相当陌生,但仍然尝试为Unity编写泛型单例行为,从以下声明开始: public abstract class Singleton<T> : MonoBehaviour where T : Singleton<T>{} 然后通过宣布两个儿童班立即对其进行测试: public class Example : Singleton<Example> {} public class Fraud : Singleton<Example> {

我对泛型类型相当陌生,但仍然尝试为Unity编写泛型单例行为,从以下声明开始:

public abstract class Singleton<T> : MonoBehaviour where T : Singleton<T>{}
然后通过宣布两个儿童班立即对其进行测试:

public class Example : Singleton<Example> {}
public class Fraud   : Singleton<Example> {}
我以为会有错误,但实际上已经编译了。 据我所知,其中T:Singleton应该足以迫使欺诈从Singleton派生出来,但显然不是

我做错了什么? 是否真的有办法强制执行这样的约束

public class Example : Singleton<Example> {}
对Singleton的约束是T:Singleton。替换T:=Example,您将得到约束示例:Singleton,它保持不变,因为这就是我们声明示例的方式。没有问题


欺诈没有理由是无效的,所以它是有效的。毕竟,F-有界多态性的要点是方法链接,您可以像在示例中一样在欺诈上链接方法。它可能做不到同样的事情,但如果您创建了一个新的IDictionary,忽略每一秒要添加的调用,您将遇到同样的问题:除非您是Coq,否则无法使用类型系统强制执行所有内容;你不能总是阻止外部实体做他们不应该做的事情。

我意识到我对这个约束的误解是多么严重。我认为没有任何约束可以实现我所期望的结果?
public class Fraud  : Singleton<Example> {}