【发布时间】:2018-05-22 11:26:12
【问题描述】:
我不认为我想要的东西是可能的,但我希望有人可以验证这一点并解释为什么它是不可能的。
我们有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
【问题讨论】:
-
不,这在默认情况下是不可能的,但看起来您正在交付一个库,您可以包含一些 Roslyn 构建步骤来为您执行此操作。
-
这将是一个可行的选择。我以前没有使用过 Roslyn - 你对如何开始使用 Roslyn 解决这个问题有什么建议吗?
标签: c# generics inheritance