Я искал способ обнаружить такой закрытый тип с помощью отражения, однако у меня не нашел никакого «хорошего» способа сделать это.
Не существует метода Is…, который бы определял, ограничен ли тип областью действия только файлом (в отличие от таких методов, как IsPublic, IsNested, … и их комбинации, которые могут определить, является ли метод частным (~ вложенным) или внутренним (~ не общедоступным (но и не вложенным)) и т. д.).
На основании того, что я собрал на данный момент, любой тип в области файла:
- является не общедоступен -> Type.IsNotPublic == true
- не вложен -> Type.IsNested* == false
< li>не «оснащен» каким-либо атрибутом, «базовым классом» или какой-либо другой конструкцией, о которой я могу подумать. - можно отличить только по имени типа среды выполнения, имеющему формат примерно
[Я не ходил в IL, просто искал в сети]
Код: Выделить всё
$"{uniqueHexId}__{userTypeName}"
Код: Выделить всё
[GeneratedRegex("^[A-F0-9]+__.*$")]
private static partial Regex FileScopeClassNameRegex()
Точнее : Есть ли какой-нибудь систематический способ обнаружения классов в области файлов в C#?
Я поигрался с фрагментом кода, похожим на эту скрипту.
Подробнее здесь: https://stackoverflow.com/questions/783 ... e-modifier