C#反射

/ / C#反射

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

  • Type
  • MemberInfo
  • ConstructorInfo
  • MethodInfo
  • FieldInfo
  • PropertyInfo
  • TypeInfo
  • EventInfo
  • Module
  • Assembly
  • AssemblyName
  • Pointer etc.

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

无涯教程网

C#类型类

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

C#类型属性

下面列出了Type类的重要属性:

PropertyDescription
Assembly获取此类型的程序集。
AssemblyQualifiedName获取此类型的程序集限定名称。
Attributes获取与类型关联的属性。
BaseType获取基类型或父类型。
FullName获取类型的完全限定名称。
IsAbstract用于检查类型是否为抽象。
IsArray用于检查类型是否为 Array。
IsClass用于检查类型是否为 Class。
IsEnum用于检查类型是否为 Enum。
IsInterface用于检查类型是否为接口。
IsNested用于检查类型是否为嵌套。
IsPrimitive用于检查类型是否为 Primitive。
IsPointer用于检查类型是否为Pointer。
IsNotPublic用于检查类型是否不是Public。
IsPublic用于检查类型是否为 Public。
IsSealed用于检查类型是否为密封。
IsSerializable用于检查类型是否可序列化。
MemberType用于检查类型是否为嵌套类型的成员类型。
Module获取类型的模块。
Name获取类型的名称。
Namespace获取类型的命名空间。

C#类型方法

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

MethodDescription
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);
    }
}

输出:

链接:https://www.learnfk.comhttps://www.learnfk.com/csharp/c-sharp-reflection.html

来源:LearnFk无涯教程网

System.Int32

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

using System;
using System.Reflection;
public class ReflectionExample
{
   public static void Main()
    {
        Type t = typeof(System.String);
        Console.WriteLine(t.Assembly); 
   }
}

输出:

链接:https://www.learnfk.comhttps://www.learnfk.com/csharp/c-sharp-reflection.html

来源:LearnFk无涯教程网

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);
    }
}

输出:

链接:https://www.learnfk.comhttps://www.learnfk.com/csharp/c-sharp-reflection.html

来源:LearnFk无涯教程网

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);
        }
    }
}

输出:

链接:https://www.learnfk.comhttps://www.learnfk.com/csharp/c-sharp-reflection.html

来源:LearnFk无涯教程网

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);
        }
    }
}

输出:

链接:https://www.learnfk.comhttps://www.learnfk.com/csharp/c-sharp-reflection.html

来源:LearnFk无涯教程网

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);
        }
    }
}

输出:

链接:https://www.learnfk.comhttps://www.learnfk.com/csharp/c-sharp-reflection.html

来源:LearnFk无涯教程网

Fields of System.String type...
System.String Empty
Int32 TrimHead
Int32 TrimTail
Int32 TrimBoth
Int32 charPtrAlignConst
Int32 alignConst

祝学习愉快! (发现内容有误?请选中要编辑的内容 -> 右键 -> 修改 -> 提交!帮助我们改进教程质量)

精选教程推荐

👇 以下精选教程可能对您有帮助,拓展您的技术视野

玩转AI创意写作 -〔于菁健〕

Rust 语言从入门到实战 -〔唐刚〕

超级访谈:对话道哥 -〔吴翰清(道哥)〕

结构写作力 -〔李忠秋〕

零基础GPT应用入门课 -〔林健(键盘)〕

李智慧 · 高并发架构实战课 -〔李智慧〕

正则表达式入门课 -〔涂伟忠〕

零基础学Java -〔臧萌〕

Linux性能优化实战 -〔倪朋飞〕

📝 好记忆不如烂笔头,留下您的学习笔记吧!

暂无学习笔记,成为第一个分享的人吧!

您的笔记将帮助成千上万的学习者