gpt4 book ai didi

c# - 继承指定的泛型类型

转载 作者:太空狗 更新时间:2023-10-30 00:48:04 26 4
gpt4 key购买 nike

我不认为我想要的是可能的,但我希望有人可以验证这一点,也许可以解释为什么这是不可能的。

我们继承了Bar<T> ,为此我们无法触及 Bar<T> 的源代码

abstract class Foo<T> : Bar<T>

我们提供 Foo<T>由第三方实现,我们还想规定任何类继承自 Foo<T>T 的指定类型.这当然可以由第三方手动完成,例如

class Fizz : Foo<Fizz>

但是,我发现重复了 Fizz又麻烦又丑陋。有没有可能Foo<T>自动使用Fizz作为 T 的指定类型?也就是说,有没有可能让Foo<T>按照这些思路实现一些东西

abstract class Foo : Bar<T>
where T : "Whatever class inherits from Foo"

...我认为这是不可能的,因为我找不到合适的通用类型约束。是否可以改为做这样的事情

[SomeBlackMagic("Dear compiler, T is whatever inherits from Foo.")]
abstract class Foo : Bar<T>

... 这样 Fizz 的实现可能只是

class Fizz : Foo

最佳答案

这就是所谓的 Curiously Recurring Template Pattern .不幸的是,大多数强类型语言都无法消除这种代码味道。 C# 无法对此进行改进。

您可以求助于运行时检查,但要以编译时检查为代价。此外,您实际上不会在类接口(interface)中使用该类型。例如,您将无法执行类似 abstract class Foo<T> { public T Bar() { ... } } 的操作。因为T编译器不会知道。

关于c# - 继承指定的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50419920/

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