Обнаружьте сгенерированного конструктора по умолчанию компилятора с помощью отражения в C#

Я нацелен на.NET 3,5 SP1, и я использую CommentChecker для проверки моей документации XML, все работает хорошо, пока я не добираюсь до класса как это:

/// 
/// documentation
/// 
public sealed class MyClass {
    /// 
    /// documentation
    /// 
    public void Method() {
    }
}

В примере выше, как я понимаю, компилятор генерирует конструктора по умолчанию для моего класса. Проблема с этим состоит в том, что CommentChecker генерирует предупреждения, говоря мне, что конструктор пропускает комментарии.

Я пытался изменить программу, чтобы обнаружить этот особый случай и проигнорировать его, но я застреваю, я уже попробовал IsDefined(typeof(CompilerGeneratedAttribute), true) но это не работало.

Таким образом короче говоря, как я могу обнаружить конструктора по умолчанию с помощью отражения?

5
задан casperOne 10 September 2012 в 13:45
поделиться

2 ответа

Не существует способа обнаружить автоматически созданные конструкторы по умолчанию через метаданные. Вы можете проверить это, создав библиотеку классов с двумя классами, один с явным конструктором по умолчанию, а другой без него. Затем запустите ildasm на сборке: метаданные двух конструкторов идентичны.

Вместо того чтобы пытаться обнаружить сгенерированные конструкторы, я бы просто изменил программу, чтобы разрешить отсутствие документации для любого конструктора по умолчанию. Большинство программ генерации документации, таких как NDoc и SandcastleGUI, имеют опцию добавления стандартной документации ко всем конструкторам по умолчанию; поэтому нет необходимости документировать их вообще. Если в вашем коде есть явный конструктор по умолчанию, вы можете поставить три косые черты (///) над конструктором - больше ничего - чтобы отключить предупреждение Visual Studio об отсутствии документации.

5
ответ дан 13 December 2019 в 19:20
поделиться

Следующий код вернет информацию о любых конструкторах без параметров в вашем типе:

var info = typeof(MyClass).GetConstructor(new Type[] {});

Я не знаю способа отличить конструктор по умолчанию от явно указанного конструктора без параметров.

Возможным обходным решением для вашей проблемы с CommentChecker было бы явное создание конструктора без параметров там, где он требуется, и соответствующее его комментирование.

1
ответ дан 13 December 2019 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: