C# 反射

C# 反射是指在运行时动态地获取类型信息并操作对象的能力。通过反射,我们可以在运行时获取一个类型的成员信息(如字段、属性、方法等),并且可以动态地创建对象、调用方法、设置属性等。

1.释义

C# 反射是指在运行时动态地获取程序集、类型、成员等信息的能力。通过反射,我们可以在运行时获取类型的信息,创建对象、调用方法、访问属性等。

C# 反射提供了以下几个核心类:

1. Assembly:表示一个程序集,可以通过该类获取程序集的信息。

2. Type:表示一个类型,可以通过该类获取类型的信息。

3. MethodInfo:表示一个方法,可以通过该类获取方法的信息。

4. PropertyInfo:表示一个属性,可以通过该类获取属性的信息。

5. FieldInfo:表示一个字段,可以通过该类获取字段的信息。

使用 C# 反射可以实现很多高级功能,比如动态加载程序集、动态创建对象、动态调用方法等。但是反射的使用也会带来一些性能上的损失,因此在实际开发中需要谨慎使用。

2.实例

下面是一个简单的示例,演示如何使用反射来创建一个对象、调用它的方法并设置它的属性:

```csharp
using System;
using System.Reflection;

class Program
{
    static void Main(string[] args)
    {
        // 获取类型信息
        Type type = typeof(MyClass);

        // 创建对象
        object obj = Activator.CreateInstance(type);

        // 调用方法
        MethodInfo method = type.GetMethod("SayHello");
        method.Invoke(obj, null);

        // 设置属性
        PropertyInfo property = type.GetProperty("Name");
        property.SetValue(obj, "Tom", null);

        // 输出属性值
        Console.WriteLine(property.GetValue(obj, null));
    }
}

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

    public void SayHello()
    {
        Console.WriteLine("Hello, world!");
    }
}
```

在上面的示例中,我们首先使用 `typeof` 关键字获取 `MyClass` 类型的信息,然后使用 `Activator.CreateInstance` 方法创建一个 `MyClass` 的实例。接着,我们使用 `GetMethod` 方法获取 `SayHello` 方法的信息,并使用 `Invoke` 方法调用该方法。然后,我们使用 `GetProperty` 方法获取 `Name` 属性的信息,并使用 `SetValue` 方法设置该属性的值。最后,我们使用 `GetValue` 方法获取 `Name` 属性的值,并输出它。

需要注意的是,反射操作会带来一定的性能损失,因此应该尽量避免在性能要求较高的场景中使用反射。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值