在C#中,反射(Reflection)是一种强大的机制,允许在运行时获取程序集、模块、类型和成员的信息,并且可以创建、调用和操作对象,以及在运行时动态地检查和修改代码。以下是一些关于C#反射的基本概念:

获取类型信息:
using System;

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

        // 输出类型的名称
        Console.WriteLine("Type Name: " + type.FullName);

        // 获取类型的成员信息
        foreach (var memberInfo in type.GetMembers())
        {
            Console.WriteLine("Member: " + memberInfo.Name);
        }
    }
}

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

创建对象:
using System;
using System.Reflection;

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

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

        // 设置属性值
        PropertyInfo propertyInfo = type.GetProperty("MyProperty");
        propertyInfo.SetValue(instance, 42);

        // 调用方法
        MethodInfo methodInfo = type.GetMethod("MyMethod");
        methodInfo.Invoke(instance, null);
    }
}

class MyClass
{
    public int MyProperty { get; set; }
    public void MyMethod()
    {
        Console.WriteLine("Method called.");
    }
}

获取和使用自定义特性:
using System;
using System.Reflection;

[AttributeUsage(AttributeTargets.Class)]
public class MyCustomAttribute : Attribute
{
    public string Description { get; }

    public MyCustomAttribute(string description)
    {
        Description = description;
    }
}

[MyCustom("This is a custom attribute.")]
class MyClass { }

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

        // 获取自定义特性
        MyCustomAttribute customAttribute = (MyCustomAttribute)Attribute.GetCustomAttribute(type, typeof(MyCustomAttribute));

        // 使用特性信息
        Console.WriteLine("Description: " + customAttribute.Description);
    }
}

反射提供了许多强大的工具,可以在运行时检查和操作类型、成员、属性等。然而,由于反射涉及到运行时的类型信息,因此使用时需要格外小心,并确保性能和类型安全性。


转载请注明出处:http://www.zyzy.cn/article/detail/14769/C#