反射

在C#中,反射(Reflection)是一个强大的工具,它允许程序在运行时检查类型的信息(如类、结构、接口、字段、属性、方法等),并且可以动态地创建和调用类型的实例。反射主要使用System.Reflection命名空间中的类。

以下是一些反射的常见用法:

  1. 获取类型信息:

    • 使用Typeof运算符或object.GetType()方法获取类型的Type对象。
    • 使用Type对象的属性(如NameNamespaceBaseType等)获取类型的基本信息。
  2. 获取成员信息:

    • 使用Type对象的GetFieldsGetPropertiesGetMethods等方法获取类型的字段、属性和方法信息。
    • 这些方法返回FieldInfoPropertyInfoMethodInfo的数组,这些类提供了对成员更深入的访问。
  3. 动态创建和调用:

    • 使用Activator.CreateInstance方法动态创建类型的实例。
    • 使用MethodInfoInvoke方法动态调用方法。
    • 使用FieldInfoSetValueGetValue方法设置和获取字段的值。
    • 使用PropertyInfoSetValueGetValue方法设置和获取属性的值。
  4. 自定义属性:

    • 使用自定义属性(Attribute)为代码添加元数据。
    • 使用反射在运行时读取这些自定义属性。
RefObject refObject = new RefObject("DWK");
refObject.Index = 1;

var type = refObject.GetType();
Console.WriteLine(type.GetProperty("Index").GetValue(refObject));
Console.WriteLine(type.GetProperty("Name").GetValue(refObject));
Console.WriteLine(type.GetMethod("GetName").Invoke(refObject, null));
//创建对象
//命名空间
//type = Type.GetType("ConsoleApp1.RefObject");
//加载程序集
var assembly = Assembly.LoadFrom("ConsoleApp1.dll");
type = assembly.GetType("ConsoleApp1.RefObject");
var gzhs = type.GetConstructor(Type.EmptyTypes);
var obj = gzhs.Invoke(null);//无参构造
Console.WriteLine(type.GetProperty("Index").GetValue(obj));
Console.WriteLine(type.GetProperty("Name").GetValue(obj));
Console.WriteLine(type.GetMethod("GetName").Invoke(obj, null));
var gzhs1 = type.GetConstructor(new[] { typeof(string) });
var obj1 = gzhs1.Invoke(new object[] { "CSY" });//有参构造
Console.WriteLine(type.GetProperty("Index").GetValue(obj1));
Console.WriteLine(type.GetProperty("Name").GetValue(obj1));
Console.WriteLine(type.GetMethod("GetName").Invoke(obj1, null));

 

posted @ 2024-06-20 00:36  DaiWK  阅读(8)  评论(0编辑  收藏  举报