C# 编程指南:类型信息和反射API

在C#中,类型信息和反射API提供了一种机制,使我们能够在运行时获取和操作代码的元数据。这些API允许我们动态地了解和处理类型、成员、属性、方法等的信息。

部分
1
类型信息
类型信息是关于类型(类、接口、结构体等)的元数据,例如名称、成员、属性、方法等。
在C#中,可以使用Type类和其他相关类来访问和操作类型信息。
using System;

public class MyClass
{
    public string Name { get; set; }

    public void MyMethod(int value)
    {
        Console.WriteLine("Value: " + value);
    }
}

public class Program
{
    static void Main(string[] args)
    {
        Type myClassType = typeof(MyClass);

        // 获取类型的名称
        string typeName = myClassType.Name;
        Console.WriteLine("Type Name: " + typeName);

        // 获取类型的完全限定名
        string fullName = myClassType.FullName;
        Console.WriteLine("Full Name: " + fullName);

        // 获取类型的成员信息
        MemberInfo[] members = myClassType.GetMembers();
        Console.WriteLine("\nMembers:");
        foreach (var member in members)
        {
            Console.WriteLine(member.Name);
        }

        // 获取属性信息
        PropertyInfo[] properties = myClassType.GetProperties();
        Console.WriteLine("\nProperties:");
        foreach (var property in properties)
        {
            Console.WriteLine(property.Name);
        }

        // 获取方法信息
        MethodInfo[] methods = myClassType.GetMethods();
        Console.WriteLine("\nMethods:");
        foreach (var method in methods)
        {
            Console.WriteLine(method.Name);
        }
    }
}

在上述示例中,我们使用typeof运算符获取MyClass类型的Type对象。然后,我们使用Type对象的不同方法来访问类型的名称、完全限定名、成员信息、属性信息和方法信息。

部分
2
反射API
反射API提供了一组类(如Type、MemberInfo、PropertyInfo、MethodInfo等等),用于检索和操作代码元素的元数据。
反射API允许我们在运行时动态地创建、访问和调用类型和成员。
using System;
using System.Reflection;

public class MyClass
{
    public string Name { get; set; }

    public void MyMethod(int value)
    {
        Console.WriteLine("Value: " + value);
    }
}

public class Program
{
    static void Main(string[] args)
    {
        // 创建对象实例
        Type myClassType = typeof(MyClass);
        object myObject = Activator.CreateInstance(myClassType);

        // 设置属性值
        PropertyInfo propertyInfo = myClassType.GetProperty("Name");
        propertyInfo.SetValue(myObject, "John Doe");

        // 调用方法
        MethodInfo methodInfo = myClassType.GetMethod("MyMethod");
        methodInfo.Invoke(myObject, new object[] { 42 });

        // 获取属性值
        string name = (string)propertyInfo.GetValue(myObject);
        Console.WriteLine("Name: " + name);
    }
}

在上述示例中,我们使用反射API来创建MyClass类型的对象实例,设置属性值,调用方法和获取属性值。 通过使用Activator.CreateInstance方法,我们创建了MyClass类型的对象实例。然后,使用GetProperty方法获取Name属性的PropertyInfo对象,并使用SetValue方法设置属性值。 使用GetMethod方法获取MyMethod方法的MethodInfo对象,并使用Invoke方法调用方法。 最后,使用GetValue方法获取Name属性的值,并将其转换为适当的类型进行使用。 通过使用类型信息和反射API,我们可以在运行时动态地获取和操作类型和成员的元数据,以实现更灵活和动态的编程方式。

    目录

  • 1.
    类型信息
  • 2.
    反射API