Я не думаю, что то, что я хочу, возможно, но я надеюсь, что кто-то может это проверить и, возможно, объяснить, почему это невозможно.
У нас есть наследование 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