反射
在C#中,反射(Reflection)是一个强大的工具,它允许程序在运行时检查类型的信息(如类、结构、接口、字段、属性、方法等),并且可以动态地创建和调用类型的实例。反射主要使用System.Reflection命名空间中的类。
以下是一些反射的常见用法:
- 
获取类型信息: - 使用Typeof运算符或object.GetType()方法获取类型的Type对象。
- 使用Type对象的属性(如Name、Namespace、BaseType等)获取类型的基本信息。
 
- 使用
- 
获取成员信息: - 使用Type对象的GetFields、GetProperties、GetMethods等方法获取类型的字段、属性和方法信息。
- 这些方法返回FieldInfo、PropertyInfo和MethodInfo的数组,这些类提供了对成员更深入的访问。
 
- 使用
- 
动态创建和调用: - 使用Activator.CreateInstance方法动态创建类型的实例。
- 使用MethodInfo的Invoke方法动态调用方法。
- 使用FieldInfo的SetValue和GetValue方法设置和获取字段的值。
- 使用PropertyInfo的SetValue和GetValue方法设置和获取属性的值。
 
- 使用
- 
自定义属性: - 使用自定义属性(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));
    喜欢 C#、SQL、Web

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号