为何C#的Type.GetProperties会返回抽象类PropertyInfo的数组?
关于Type.GetProperties()返回抽象类数组的疑问解答
- 这不是文档错误,
Type.GetProperties()确实返回System.Reflection.PropertyInfo[]类型的数组,但数组里的元素是PropertyInfo的具体子类实例,而非抽象类本身的实例。 - .NET反射框架内部会创建
PropertyInfo的具体派生类(比如RuntimePropertyInfo,不同.NET运行时可能有不同的实现类),这些子类继承自抽象的PropertyInfo,并实现了所有抽象成员。 - 抽象类的限制是不能直接实例化,但完全可以用抽象类类型来引用它的子类实例,这是面向对象多态的典型用法。所以返回
PropertyInfo[]是完全合理的——你可以通过这些抽象类型的引用,调用PropertyInfo定义的所有方法和属性,底层实际执行逻辑的是具体子类实例。
内容的提问来源于stack exchange,提问作者Karl Gardner
相关产品推荐
相关产品推荐

