C#反射介绍

C# 反射(Reflection)是一个强大的机制,允许在运行时检查程序集、模块和类型的元数据,以及动态创建和操作类型的实例。通过反射,你可以在运行时获取和设置对象的属性、调用方法、创建新对象,甚至可以加载新的程序集。

反射的主要特点和用途

  1. 检查对象类型:能够检查任何对象的类型。
  2. 动态创建实例:可以动态创建类的实例。
  3. 获取和设置属性和字段:能够在运行时获取或修改属性和字段的值。
  4. 动态调用方法:可以动态调用对象的方法。
  5. 程序集和模块操作:可以加载和分析程序集和模块。
  6. 自定义特性处理:反射允许读取自定义特性。

反射的使用示例

1. 获取类型信息
using System;

public class MyClass
{
    public int MyProperty { get; set; }
    public void MyMethod() { }
}

public class Program
{
    public static void Main()
    {
        Type myType = typeof(MyClass);
        Console.WriteLine("Properties:");
        foreach (var prop in myType.GetProperties())
        {
            Console.WriteLine(prop.Name);
        }

        Console.WriteLine("Methods:");
        foreach (var method in myType.GetMethods())
        {
            Console.WriteLine(method.Name);
        }
    }
}
2. 动态创建实例
using System;

public class MyClass
{
    public MyClass()
    {
        Console.WriteLine("MyClass instance created");
    }
}

public class Program
{
    public static void Main()
    {
        Type myType = typeof(MyClass);
        MyClass myClassInstance = (MyClass)Activator.CreateInstance(myType);
    }
}
3. 获取和设置属性值
using System;
using System.Reflection;

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

public class Program
{
    public static void Main()
    {
        MyClass myClass = new MyClass();
        PropertyInfo propInfo = myClass.GetType().GetProperty("Name");

        // 设置属性值
        propInfo.SetValue(myClass, "Test Name");

        // 获取属性值
        string value = (string)propInfo.GetValue(myClass);
        Console.WriteLine("Name: " + value);
    }
}
4. 动态调用方法
using System;
using System.Reflection;

public class MyClass
{
    public void MyMethod(string message)
    {
        Console.WriteLine("Message: " + message);
    }
}

public class Program
{
    public static void Main()
    {
        MyClass myClass = new MyClass();
        MethodInfo methodInfo = myClass.GetType().GetMethod("MyMethod");

        // 动态调用方法
        methodInfo.Invoke(myClass, new object[] { "Hello Reflection" });
    }
}

这些示例展示了反射的基本使用方法,包括获取类型信息、创建类实例、操作属性和字段,以及动态调用方法。反射是一个功能强大但相对高开销的特性,因此在性能敏感的应用中应谨慎使用。

你可能感兴趣的:(C#基础,c#,C#反射)