📅  最后修改于: 2023-12-03 15:14:32.562000             🧑  作者: Mango
在C#中,反射是指能够在运行时动态地获取程序集中类型的信息的技术。它可以让我们在运行时动态地创建对象、调用方法、获取或设置属性和字段的值,以及执行其他各种操作。
首先我们需要获取要反射的类型信息,一般有以下三种方式:
typeof()
方法,可以直接获取某个类型的信息。Type type1 = typeof(string);
GetType()
方法,可以获取对象的类型信息。string str = "Hello";
Type type2 = str.GetType();
Assembly.GetExecutingAssembly()
方法,可以获取当前程序集(即当前应用程序域)中的类型信息。Type type3 = Assembly.GetExecutingAssembly().GetType("Demo.Test");
获取属性、方法、字段等信息,我们需要使用Type
对象中的相应的方法或属性。以下是一些例子:
PropertyInfo propertyInfo = testType.GetProperty("TestProperty");
MethodInfo methodInfo = testType.GetMethod("TestMethod");
FieldInfo fieldInfo = testType.GetField("TestField");
使用Activator
类可以动态地创建对象,而使用MethodInfo.Invoke
方法可以调用指定对象的方法。以下是一些例子:
object obj = Activator.CreateInstance(testType);
methodInfo.Invoke(obj, new object[] { "Hello, World!" });
使用PropertyInfo.SetValue
方法可以动态地设置属性的值,而使用FieldInfo.SetValue
可以设置字段的值。以下是一些例子:
propertyInfo.SetValue(obj, "Hello, World!", null);
fieldInfo.SetValue(obj, "Hello, World!");
反射是C#中十分强大而灵活的技术,它可以让我们在运行时动态地获取类型信息,创建对象和调用方法,以及修改属性和字段的值。虽然反射的性能不如直接调用,但在一些需要动态地获取类型信息的情况下,反射是十分有用的。