一、先给你一个“解剖用”的完整类
二、Type.Get* 方法总览(先给全景图)
| 方法 | 返回类型 | 对应类的哪一部分 |
|---|---|---|
GetFields() |
FieldInfo[] |
字段 |
GetProperties() |
PropertyInfo[] |
属性 |
GetMethods() |
MethodInfo[] |
方法 |
GetConstructors() |
ConstructorInfo[] |
构造函数 |
GetEvents() |
EventInfo[] |
事件 |
GetInterfaces() |
Type[] |
实现的接口 |
GetMembers() |
MemberInfo[] |
以上所有成员 |
GetNestedTypes() |
Type[] |
内部类 |
GetBaseType() / .BaseType |
Type |
父类 |
三、逐个方法「拆解说明 + 示例输出」
1️⃣ GetFields —— 类的“字段区”
📌 对应 C/C++ struct 成员
📌 不包括属性!
2️⃣ GetProperties —— 类的“属性区”
-
属性 ≠ 字段
-
属性背后有 getter / setter 方法
3️⃣ GetMethods —— 类的“行为区”
👉 获取的是:
输出示例(部分):
⚠ 包含父类和 object 的方法(除非过滤)
4️⃣ GetConstructors —— 构造函数
👉 获取的是:
5️⃣ GetEvents —— 事件
👉 获取的是:
6️⃣ GetInterfaces —— 实现的接口
7️⃣ GetMembers —— “大杂烩”
👉 包含:
-
字段
-
属性
-
方法
-
构造函数
-
事件
输出示例(节选):
8️⃣ BaseType / GetBaseType —— 继承结构
👉 得到:
9️⃣ GetNestedTypes —— 内部类
👉 得到:
四、类结构 vs Get* 方法对照图(核心)
五、你这种工程场景的“正确姿势”(结合你背景)
你经常做的事情:
-
C# ↔ C struct
-
DLL 参数映射
-
大型参数结构体
👉 正确选择:
| 目标 | 推荐 API |
|---|---|
| 数据字段 | GetFields() |
| 业务模型 | GetProperties() |
| 自动映射 | Fields + Properties |
| 调试/分析 | GetMembers() |
六、一句话总结(你可以记这个)
Type.GetXxx() 就是“类结构的 X 区”
-
字段 →
GetFields -
属性 →
GetProperties -
行为 →
GetMethods -
全部 →
GetMembers
浙公网安备 33010602011771号