Несколько лет назад Эрик Липперт blogged о гипотетическом операторе информации, который позволит вам получить информацию о методе/свойствах во время компиляции во время выполнения. В основном говорят, что это хороший пони, но не единорог ....Недвижимость-aka infoof - через Rosyln?
Я немного читал о способности Розильна переписывать ваш код во время компиляции, насколько сложно было бы реализовать информацию с использованием Roslyn?
EDIT: Я думал, что это может быть способ получить все, что Эрик сказал, о чем вы думали, но я должен был сломать функции немного, если бы это было не так.
- Получить название объекта недвижимости.
- Получить тип недвижимости.
- Получить принадлежности для доступа к объекту.
- Получить имя метода.
- Получить все, что он подразумевает под infoof ...
В рефакторинга безопасный способ, который получает проверено во время компиляции. Для меня лично 1 охватывает около 90% того, что я бы использовал (новый атрибут информации об абоненте для получения имени вызывающего абонента может фактически покрыть около 60%, но, конечно, если бы был способ, который работал как внутри, так и снаружи метода , что было бы предпочтительнее).
Я сомневаюсь, что это возможно. С 'typeof' аргумент оператора четко определен и не существует двусмысленности (существует только один тип с конкретными параметрами имени и типа, оставляя в стороне проблему с пространством имен). Однако, как «информация» будет различать, например, 'void MyFunc (string arg)' и 'void MyFunc (int arg)'? – penartur
Эрик предложил возможный синтаксис для того, чтобы отличить их в своем блоге, хотя этого недостаточно для некоторых неприятных случаев. –
Просто создайте делегата и получите 'Target'. – leppie