使用 self 作为通用类型约束

埃斯特卡

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

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>,但显然不是。

我做错了什么?
实际上有没有办法强制执行这样的约束?

HTNW
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 有界多态性的重点是方法链,你可以Fraud在 上一样链接方法Example它可能不会做同样的事情,但如果你创建一个 newIDictionary忽略每一次对 的调用,你会遇到同样的问题Add:你不能使用类型系统来强制执行所有事情(除非你是 Coq);你不能总是阻止外部实体做他们不应该做的事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 TypeScript 的通用类型参数中使用联合类型作为约束

使用枚举作为通用类型

使用更高类型的通用约束图?

使用`self`作为默认参数

在扩展中使用 self 类型作为函数参数

使用通用类的参数作为事件类型

使用通用类型参数作为参数

使用通用协议作为变量类型

将Self用作通用类型

属性类型为Self的协议只能用作通用约束,为什么?

协议“形状”只能用作通用约束,因为它具有 Self 或相关类型要求

使用 self 变量作为 python 方法参数

使用self。*作为方法的默认值

使用self。*作为方法的默认值

在单例中使用self作为参数

我对匿名方法类型使用什么通用约束?

使用Castle Windsor解决具有通用类型约束的接口

使用推断的方法返回类型的Typescript通用约束

使用关联类型和Self的Swift协议?

在通用类中使用类型变量作为返回类型

为什么使用“ Self”作为参数类型会引起生命周期错误?

为什么.NET方法有时会返回通用类型,而不是使用通用类型和类型约束?

如何修复协议只能用作通用约束,因为它具有 Self 或相关类型要求错误

“协议...只能用作通用约束,因为它具有Self或关联的类型要求”是什么意思?

为什么会出现错误“ Protocol…只能用作通用约束,因为它具有Self或关联的类型要求”?

查找使用类型'x'作为通用类型参数的实现通用类的类

使用自定义诺言作为通用类型

使用指定的通用List类型作为方法参数传递Observable

是否可以在Swift中使用Self或关联的类型要求创建通用的计算属性,如果可以,如何创建?