C#教程
C#控制语句
C#函数
C#数组
C#面向对象
C#命名空间和异常
C#文件IO
C#集合
C#多线程
C#其它

C# 反射

C# 反射

在 C# 中,反射是一个在运行时获取类型元数据的过程。 System.Reflection 命名空间包含反射所需的类,例如:
输入 会员信息 构造函数信息 方法信息 字段信息 属性信息 类型信息 事件信息 模块 组装 程序集名称 指针等
System.Reflection.Emit 命名空间包含发出元数据的类。

C# Type class

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

C# Type 属性

Type 类的重要属性列表如下:
Property Description
Assembly 获取此类型的程序集。
AssemblyQualifiedName 获取此类型的程序集限定名称。
Attributes 获取与类型关联的属性。
BaseType 获取基本类型或父类型。
FullName 获取类型的完全限定名称。
IsAbstract 用于检查类型是否为Abstract。
IsArray 用于检查类型是否为Array。
IsClass 用于检查类型是否为Class。
IsEnum 用于检查类型是否为Enum。
IsInterface 用于检查类型是否为Interface。
IsNested 用于检查类型是否为Nested。
IsPrimitive 用于检查类型是否为Primitive。
IsPointer 用于检查类型是否为Pointer。
IsNotPublic 用于检查类型是否不是Public。
IsPublic 用于检查类型是否为Public。
IsSealed 用于检查类型是否为Sealed。
IsSerializable 用于检查类型是否可序列化。
MemberType 用于检查类型是否为嵌套类型的成员类型。
Module 获取类型的模块。
Name 获取类型的名称。
Namespace 获取类型的命名空间。

C# Type Methods

Type 类的重要方法列表如下:
方法 说明
GetConstructors() 返回类型的所有公共构造函数。
GetConstructors(BindingFlags) 返回具有指定 BindingFlags 的 Type 的所有构造函数。
GetFields() 返回类型的所有公共字段。
GetFields(BindingFlags) 返回具有指定 BindingFlags 的 Type 的所有公共构造函数。
GetMembers() 返回类型的所有公共成员。
GetMembers(BindingFlags) 返回具有指定 BindingFlags 的 Type 的所有成员。
GetMethods() 返回类型的所有公共方法。
GetMethods(BindingFlags) 返回具有指定 BindingFlags 的 Type 的所有方法。
GetProperties() 返回类型的所有公共属性。
GetProperties(BindingFlags) 返回具有指定 BindingFlags 的 Type 的所有属性。
GetType() 获取当前类型。
GetType(String) 获取给定名称的类型。

C#反射示例: 获取类型

using System;
public class ReflectionExample
{
   public static void Main()
    {
        int a = 10;
        Type type = a.GetType();
        Console.WriteLine(type);
    }
}
输出:
 System.Int32

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

using System;
using System.Reflection;
public class ReflectionExample
{
   public static void Main()
    {
        Type t = typeof(System.String);
        Console.WriteLine(t.Assembly); 
   }
}
输出:
 mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

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

using System;
using System.Reflection;
public class ReflectionExample
{
    public static void Main()
    {
        Type t = typeof(System.String);
        Console.WriteLine(t.FullName);
        Console.WriteLine(t.BaseType);
        Console.WriteLine(t.IsClass);
        Console.WriteLine(t.IsEnum);
        Console.WriteLine(t.IsInterface);
    }
}
输出:
 System.String
System.Object
true
false
false

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

using System;
using System.Reflection;
public class ReflectionExample
{
    public static void Main()
    {
        Type t = typeof(System.String);
        
        Console.WriteLine("Constructors of {0} type...", t);
        ConstructorInfo[] ci = t.GetConstructors(BindingFlags.public | BindingFlags.Instance);
        foreach (ConstructorInfo c in ci)
        {
            Console.WriteLine(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# 反射示例: 打印方法

using System;
using System.Reflection;
public class ReflectionExample
{
    public static void Main()
    {
        Type t = typeof(System.String);
        
        Console.WriteLine("Methods of {0} type...", t);
        MethodInfo[] ci = t.GetMethods(BindingFlags.public | BindingFlags.Instance);
        foreach (MethodInfo m in ci)
        {
            Console.WriteLine(m);
        }
    }
}
输出:
 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# 反射示例: 打印字段

using System;
using System.Reflection;
public class ReflectionExample
{
    public static void Main()
    {
        Type t = typeof(System.String);
        
        Console.WriteLine("Fields of {0} type...", t);
        FieldInfo[] ci = t.GetFields(BindingFlags.public | BindingFlags.static | BindingFlags.NonPublic);
        foreach (FieldInfo f in ci)
        {
            Console.WriteLine(f);
        }
    }
}
输出:
 Fields of System.String type...
System.String Empty
Int32 TrimHead
Int32 TrimTail
Int32 TrimBoth
Int32 charPtrAlignConst
Int32 alignConst
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4