get_PropertyName()/set_PropertyName() против PropertyName?

Я использую отражение сборки общедоступного API, с которым я работаю вместе с System.CodeDOM, чтобы сгенерировать некоторый код, который будет извлекать информацию через API.

В части моего автоматически сгенерированного кода я ссылаюсь на значения ряда свойств типов в сборке API. Однако я продолжаю получать ссылки на свойства, которые на самом деле не существуют в моем сгенерированном коде. Я использовал Type.GetProperties(), который, насколько я понимаю, должен возвращать только общедоступные свойства.

Я изучил это дальше и обнаружил, что когда у меня было отсутствующее свойство, скажем, с именем SampleProperty, вместо этого в классе было два метода с именами get_SampleProperty и set_SampleProperty, но не было фактического свойства SampleProperty.

Что тут происходит? Почему intellisense рассматривает эти методы как отдельные методы, но когда они возвращаются через отражение, они отображаются как свойство?


person Eric Anastas    schedule 03.12.2010    source источник
comment
Думаю, мне понадобится SSCCE, чтобы помочь.   -  person Mike Clark    schedule 03.12.2010


Ответы (1)


Я использовал PropertyInfo.GetProperties(), который, насколько я понимаю, должен возвращать только общедоступные свойства.

Это может быть вашим первым зависанием, класс PropertyInfo не имеет метода GetProperties. Класс Type делает. В противном случае ваш вопрос указывает на то, что вы на самом деле используете Type.GetMethods(). Да, это возвращает методы доступа к свойствам get_Blah и set_Blah для свойства. Под капотом свойства реализованы как методы.

Используйте Type.GetProperties() для отражения свойств.

person Hans Passant    schedule 03.12.2010
comment
Да, извините, это была опечатка, я использовал Type.GetProperties() - person Eric Anastas; 04.12.2010