You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 12:06:00