К сожалению, это невозможно, , как объясняет dtb .
Одной из альтернатив является создание A
общего вида следующим образом:
public class A<T>
{
public static void Foo()
{
// use typeof(T)
}
}
public class B : A<B>
{
}
Другая возможность состоит в том, чтобы сделать метод A.Foo
универсальным, а затем предоставить методы-заглушки в производных типах, которые затем вызывают «базовую» реализацию.
Я не заинтересован в этом паттерне. Это, вероятно, имеет смысл только в том случае, если вам абсолютно необходимо соблюдать соглашение о вызовах B.Foo
, вы не можете сделать сам A
универсальным, и у вас внутри A.Foo
есть много общей логики, которую вы не хотите повторять в своих производных типы.
public class A
{
protected static void Foo<T>()
{
// use typeof(T)
}
}
public class B : A
{
public static void Foo()
{
A.Foo<B>();
}
}