反射(Reflection)是 C# 中一种强大的机制,允许在运行时检查和操纵程序集、类型和对象。通过反射,你可以动态地获取类型信息、调用方法、创建对象,以及访问和修改成员等。以下是一些基本的反射用法:

1. 获取类型信息:
   using System;

   class Program
   {
       static void Main()
       {
           Type type = typeof(string); // 获取类型信息
           Console.WriteLine("Type: " + type.FullName);

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

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

   class Program
   {
       static void Main()
       {
           Type type = typeof(MyClass);

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

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

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

3. 获取和设置属性值:
   using System;
   using System.Reflection;

   class Program
   {
       static void Main()
       {
           Type type = typeof(MyClass);

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

           // 获取属性值
           PropertyInfo property = type.GetProperty("MyProperty");
           object value = property.GetValue(instance);

           // 设置属性值
           property.SetValue(instance, "NewValue");
       }
   }

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

4. 获取和调用构造函数:
   using System;
   using System.Reflection;

   class Program
   {
       static void Main()
       {
           Type type = typeof(MyClass);

           // 获取默认构造函数
           ConstructorInfo constructor = type.GetConstructor(Type.EmptyTypes);

           // 创建对象实例
           object instance = constructor.Invoke(null);
       }
   }

   class MyClass
   {
       public MyClass()
       {
           Console.WriteLine("Constructor called.");
       }
   }

5. 判断类型关系:
   using System;

   class Program
   {
       static void Main()
       {
           Type type = typeof(string);

           // 判断类型关系
           bool isString = type == typeof(string);
           Console.WriteLine("Is string type: " + isString);
       }
   }

这些例子演示了如何使用反射获取类型信息、创建对象、调用方法、访问和修改属性,以及判断类型关系。反射是一种高级特性,通常在需要动态处理类型信息的场景下使用,例如配置文件解析、插件系统、ORM(对象关系映射)等。在使用反射时需要注意性能开销和类型安全性。


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