Подтвердить что ты не робот

Вопрос о производительности С#: typeof (MyClass) vs. this.GetType()

В первом примере руководство по конфигурации log4net автор использует typeof(MyApp) для получения типа содержащего класса MyApp. Есть ли причина не использовать this.GetType(), производительность? Поскольку мне кажется, что this.GetType() намного безопаснее из возможных ошибок копирования-вставки при копировании в другой класс.

4b9b3361

Ответ 1

typeof (Foo) - поиск статического типа; в основном это происходит во время компиляции, поэтому вы получаете только явно названный тип.

GetType() - поиск динамического типа; это виртуальный метод, который вызывается во время выполнения и даст вам точный тип, даже если вы используете полиморфизм. Так что это "медленнее", теоретически, но это дает вам то, что вы не можете получить от typeof (T). Если вам нужен один или другой для вашего дизайна, скорость не будет фактором.

Ответ 2

Проблемы с производительностью, в приведенном примере, GetType не является даже опцией, потому что это метод экземпляра; он не может быть вызван из инициализатора поля. В любом случае, поскольку целью является инициализация статического поля из статического "контекста", логически ссылка this недоступна, поэтому переход по пути статического конструктора не помог бы с разрешением GetType либо.

// Can't use GetType() - the this reference is not available.
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));