C#反射 1基础

在C#中,反射(Reflection)允许你在运行时检查对象的类型、调用对象的方法、访问对象的字段、获取对象的属性以及创建和实例化对象。这些功能都是通过System.Reflection命名空间中的类来实现的。

以下是C#中使用反射的一些常见示例:

  1. 获取类型的信息
    使用Type类可以获取一个对象或类型的元数据。
using System;  
using System.Reflection;  
  
public class ExampleClass  
{  
    public int ExampleField;  
    public void ExampleMethod() { }  
}  
  
class Program  
{  
    static void Main()  
    {  
        Type type = typeof(ExampleClass);  
          
        // 获取类型的名称  
        Console.WriteLine("Type Name: " + type.Name);  
          
        // 获取类型的所有公共方法  
        MethodInfo[] methods = type.GetMethods();  
        foreach (var method in methods)  
        {  
            Console.WriteLine("Method: " + method.Name);  
        }  
          
        // 获取类型的所有公共字段  
        FieldInfo[] fields = type.GetFields();  
        foreach (var field in fields)  
        {  
            Console.WriteLine("Field: " + field.Name);  
        }  
    }  
}
  1. 创建实例
    使用Activator.CreateInstance方法可以动态地创建对象实例。
    Type type = typeof(ExampleClass);  
    object instance = Activator.CreateInstance(type);

    若目标有参数这跟在type后,用“,”隔开

  2. 调用方法
    如果知道方法的名称和参数类型,可以使用MethodInfo.Invoke来调用它。
    MethodInfo method = type.GetMethod("ExampleMethod");  
    method.Invoke(instance, null); // 假设ExampleMethod没有参数

  3. 访问和修改字段和属性
    使用FieldInfoPropertyInfo类可以访问和修改对象的字段和属性。
    FieldInfo field = type.GetField("ExampleField");  
    field.SetValue(instance, 42); // 设置字段的值  
      
    PropertyInfo property = type.GetProperty("SomeProperty");  
    object propertyValue = property.GetValue(instance); // 获取属性的值  
    property.SetValue(instance, "NewValue", null); // 设置属性的值

  4. 获取自定义属性
    可以使用GetCustomAttributes方法来获取附加到类型或成员的自定义属性。
    object[] attributes = type.GetCustomAttributes(false);  
    foreach (var attr in attributes)  
    {  
        Console.WriteLine(attr.GetType().Name);  
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值