gpt4 book ai didi

c# - 这个循环泛型类的用法是什么?

转载 作者:太空狗 更新时间:2023-10-30 00:41:02 25 4
gpt4 key购买 nike

这段代码是用visual studio编译的,有什么用

public class MyClass<T>
where T : MyClass<T>

备注where T : MyClass<T>

最佳答案

这是 recurring template pattern and 通常用于使基类可以静态引用其真实类型。这样做是为了保持类型安全,以便基类中引用的参数或返回值跟踪层次结构中的当前类型,例如

public class Animal<T> where T : Animal<T>
{
public abstract T GiveBirth();
}

public class Cat : Animal<Cat>
{
public override Cat GiveBirth() { return new Cat(); }
}

如果没有类型参数,Animal 基类方法只能将 GiveBirth 的返回类型定义为 Animal,这可能降低客户的类型安全性。

如果您控制整个层次结构并且可以确保类提供正确的类型参数,这可能是可以接受的,但请注意它可能会被滥用,例如

public class Cat : Animal<Dog> { ... }

另一个缺点是,如果任何客户端想要应用于基类,则需要考虑泛型类型参数,例如

public static void Feed<T>(Animal<T> animal) where T : Animal<T> { ... }
public static void Feed<T>(T animal) where T : Animal<T> { ... }

关于c# - 这个循环泛型类的用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23202939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com