如何理解Unity C#中递归泛型类型约束?

3

虽然我了解通用类型 <T> 和约束的 where 子句,但我对 Unity Tower Defense 模板中以下代码感到困惑:

public abstract class Singleton<T> : MonoBehaviour where T : Singleton<T>

将类型限制为其本身的目的是什么?


你有相关上下文的链接吗? - Dai
2个回答

0

它可以防止你这样做:

public class A
{
}

public class B : Singleton<A>
{
}

你会得到一个编译错误。由于类型约束,你必须写成:

public class A : Singleton<A>
{
}

我认为OP的问题是为什么你会想要那个编译器错误?也就是说,class B : Singleton<A>有什么问题呢?这并不会阻止B成为单例,而且A也仍然可以是单例——这完全取决于OP问题中未包含的其他细节。 - Dai
请注意,如果您有public class A:Singleton<A>,那么您也可以有public class B:Singleton<A> - D Stanley

0
从我目前的了解来看,其中一个可能的好处是允许方法返回特定类型。这是通过“流畅风格”方法实现的。另一个例子(显然不适用于您发布的示例)是一个Copy()方法,它将对象的副本作为派生类型而不是其基类型返回。您发布的Singleton< T>类的方法签名可能显示它使用T参数并且可能暗示了使用此模式的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接