C#如何获取类中继承自指定基类的所有属性
解决方案
直接通过C#反射结合类型判断就能实现,核心用Type.IsAssignableFrom()方法自动校验属性类型的继承链,代码如下:
通用实现代码
using System.Reflection; using System.Collections.Generic; using System.Linq; /// <summary> /// 获取指定类中所有继承自TBase基类的属性 /// </summary> /// <typeparam name="TBase">要匹配的基类类型</typeparam> /// <param name="targetClassType">要检索的目标类的Type</param> /// <returns>符合要求的属性信息列表</returns> public static List<PropertyInfo> GetPropertiesWithBaseClass<TBase>(Type targetClassType) { // 筛选公共实例属性,判断属性类型是否可赋值给基类(即本身/继承链包含基类) return targetClassType.GetProperties(BindingFlags.Public | BindingFlags.Instance) .Where(prop => typeof(TBase).IsAssignableFrom(prop.PropertyType)) .ToList(); }
调用示例(匹配你的场景)
// 检索MyClass中继承自MyPropBaseClass的所有属性 var matchedProps = GetPropertiesWithBaseClass<MyPropBaseClass>(typeof(MyClass)); // 打印验证,输出结果为 Prop1、Prop2 foreach (var prop in matchedProps) { Console.WriteLine(prop.Name); }
逻辑说明
BindingFlags.Public | BindingFlags.Instance筛选规则刚好匹配你示例中定义的公共可读写实例属性,过滤掉静态属性、私有属性等不需要的成员typeof(TBase).IsAssignableFrom(prop.PropertyType)会自动判断属性类型本身是否等于基类,或者继承链中是否包含该基类,完全覆盖你的需求- 如果你只需要获取属性名,在
Where后追加.Select(prop => prop.Name).ToList()即可直接返回字符串列表
内容的提问来源于stack exchange,提问作者Jonny
相关产品推荐
相关产品推荐

