C# 反射

2024 年 8 月 29 日 | 阅读 3 分钟

在 C# 中,反射是一个在运行时获取类型元数据的过程。System.Reflection 命名空间包含反射所需的类,例如:

  • 类型
  • MemberInfo
  • ConstructorInfo
  • MethodInfo
  • FieldInfo
  • PropertyInfo
  • TypeInfo
  • EventInfo
  • 模块
  • 汇编
  • AssemblyName
  • Pointer 等。

System.Reflection.Emit 命名空间包含用于发出元数据的类。


C# Type 类

C# Type 类表示类类型、接口类型、枚举类型、数组类型、值类型等的类型声明。它位于 System 命名空间中。它继承自 System.Reflection.MemberInfo 类。

C# Type 属性

Type 类的一些重要属性列表如下:

属性描述
汇编获取此类型的程序集。
AssemblyQualifiedName获取此类型的程序集限定名称。
属性获取与类型关联的属性。
BaseType获取基类型或父类型。
FullName获取类型的完全限定名称。
IsAbstract用于检查类型是否为抽象类型。
IsArray用于检查类型是否为数组类型。
IsClass用于检查类型是否为类类型。
IsEnum用于检查类型是否为枚举类型。
IsInterface用于检查类型是否为接口类型。
IsNested用于检查类型是否为嵌套类型。
IsPrimitive用于检查类型是否为原始类型。
IsPointer用于检查类型是否为指针类型。
IsNotPublic用于检查类型是否为非公共类型。
IsPublic用于检查类型是否为公共类型。
IsSealed用于检查类型是否为密封类型。
IsSerializable用于检查类型是否可序列化。
MemberType用于检查类型是否为嵌套类型的成员类型。
模块获取类型的模块。
名称获取类型的名称。
命名空间获取类型的命名空间。

C# Type 方法

Type 类的一些重要方法列表如下:

方法描述
GetConstructors()返回该类型的所有公共构造函数。
GetConstructors(BindingFlags)返回具有指定 BindingFlags 的该类型的所有构造函数。
GetFields()返回该类型的所有公共字段。
GetFields(BindingFlags)返回具有指定 BindingFlags 的该类型的所有公共构造函数。
GetMembers()返回该类型的所有公共成员。
GetMembers(BindingFlags)返回具有指定 BindingFlags 的该类型的所有成员。
GetMethods()返回该类型的所有公共方法。
GetMethods(BindingFlags)返回具有指定 BindingFlags 的该类型的所有方法。
GetProperties()返回该类型的所有公共属性。
GetProperties(BindingFlags)返回具有指定 BindingFlags 的该类型的所有属性。
GetType()获取当前类型。
GetType(String)获取给定名称的类型。

C# 反射示例:获取类型

输出

System.Int32

C# 反射示例:获取程序集

输出

mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

C# 反射示例:打印类型信息

输出

System.String
System.Object
true
false
false

C# 反射示例:打印构造函数

输出

Constructors of System.String type...
Void .ctor(Char*)
Void .ctor(Char*, Int32, Int32)
Void .ctor(SByte*)
Void .ctor(SByte*, Int32, Int32)
Void .ctor(SByte*, Int32, Int32, System.Text.Encoding)
Void .ctor(Char[], Int32, Int32)
Void .ctor(Char[])
Void .ctor(Char, Int32)

C# 反射示例:打印方法

输出

Methods of System.String type...
Boolean Equals(System.Object)
Boolean Equals(System.String)
Boolean Equals(System.String, System.StringComparison)
Char get_Chars(Int32)
Void copyTo(Int32, char[], Int32, Int32)
Char[] ToCharArray()
....

C# 反射示例:打印字段

输出

Fields of System.String type...
System.String Empty
Int32 TrimHead
Int32 TrimTail
Int32 TrimBoth
Int32 charPtrAlignConst
Int32 alignConst
下一主题C# 匿名函数