get_PropertyName()/ set_PropertyName()vs PropertyName?

时间:2010-12-03 01:39:00

标签: c# .net system.reflection propertyinfo

我正在使用反射来处理我正在使用的公共API以及System.CodeDOM,以生成一些将通过API提取信息的代码。

在我自动生成的代码的一部分中,我引用了API程序集中许多类型属性的值。但是,我最后会继续引用我生成的代码中不存在的属性。我使用了Type.GetProperties(),根据我的理解,它应该只返回公共属性。

我进一步调查了一下,发现当我有一个遗失的属性时,称为SampleProperty,而类中有两个方法叫get_SamplePropertyset_SampleProperty,但没有实际的{{} 1}}属性。

这里发生了什么?为什么intellisense将这些方法视为单独的方法,但是当通过反射返回时它们会显示为属性?

1 个答案:

答案 0 :(得分:5)

  

我使用了PropertyInfo.GetProperties(),根据我的理解,它应该只返回公共属性。

这可能是您的第一次挂断,PropertyInfo类没有GetProperties方法。 Type类的确如此。您的问题另有说明您实际上正在使用Type.GetMethods()。是的,它返回属性的get_Blah和set_Blah属性访问器方法。在幕后,属性实际上是作为方法实现的。

使用Type.GetProperties()来反映属性。