Можно ли определить тип при вызове static для производного типа - PullRequest
3 голосов
/ 26 марта 2012

Учитывая

public class Original {
  public static DoStuff() {
  }
}

public class Derived : Original {
}

при вызове

Derived.DoStuff();

Странность требования в стороне, возможно ли в DoStuff() обнаружить класс, к которому оно было вызвано?

то есть возможно ли в реализации DoStuff() определить разницу между Original.DoStuff(); и Derived.DoStuff();

Ответы [ 3 ]

8 голосов
/ 26 марта 2012

Нет в C #, нет - скомпилированный IL ссылается непосредственно на Original.DoStuff.

(Я только что проверил, что VB, по-видимому, делает то же самое для статических вызовов, тогда как в IIRC есть разница между VB и C # в сгенерированном коде при вызове виртуального метода через "дочернюю" ссылку .)

1 голос
/ 26 марта 2012

Если Derived не дает своего собственного определения DoStuff, Derived.DoStuff() эквивалентно Original.DoStuff().Статические методы / переменные-члены связаны с классом, а не с какими-либо экземплярами (объектами).

0 голосов
/ 26 марта 2012

Как сказал Джон, в C # это невозможно, поскольку статические методы имеют уникальные точки входа.В любом случае, вы правы, это очень странно, что нужно было бы это обнаружить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...