下面是详细讲解“c#使用反射调用类型成员示例”的完整攻略。
什么是反射
反射是指程序在运行时能够访问、检查和修改它本身状态或行为的一种能力。在C#语言中,使用反射可以探测对象的类型信息、访问和操纵对象的属性和方法,甚至创建对象的实例。
如何使用反射调用类型成员
在C#中进行反射操作之前,需要先获取目标类型的System.Type对象。获取Type对象主要有以下几种方式:
- typeof操作符
- GetType()方法
- Type.Typeof()方法
- Assembly.GetType()方法
- Type.GetType()方法
获取Type对象之后,就可以通过Type对象访问目标类型的各个成员,包括属性、方法、字段、事件等。下面是一个使用反射调用方法的示例:
using System;
using System.Reflection;
namespace ReflectionDemo
{
class Program
{
static void Main(string[] args)
{
// 获取Type对象
Type type = typeof(Calculator);
// 创建Calculator对象
Calculator calculator = new Calculator();
// 反射调用Add方法
MethodInfo method = type.GetMethod("Add");
int result = (int)method.Invoke(calculator, new object[] { 1, 2 });
Console.WriteLine("1 + 2 = " + result);
// 反射调用Divide方法
method = type.GetMethod("Divide");
result = (int)method.Invoke(calculator, new object[] { 6, 2 });
Console.WriteLine("6 / 2 = " + result);
Console.ReadKey();
}
}
class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public int Divide(int a, int b)
{
return a / b;
}
}
}
上面的示例中,我们首先使用typeof操作符获取Calculator类型的Type对象,然后创建了一个Calculator对象。接着,我们使用Type对象的GetMethod方法获取Add方法和Divide方法的MethodInfo对象,并通过Invoke方法调用这两个方法。最终输出了结果。
除了调用方法之外,反射还可以用来访问和修改属性、字段等成员。下面是一个使用反射访问属性和字段的示例:
using System;
using System.Reflection;
namespace ReflectionDemo
{
class Program
{
static void Main(string[] args)
{
// 获取Type对象
Type type = typeof(Person);
// 创建Person对象
Person person = new Person("张三", 18);
// 反射访问Name属性
PropertyInfo property = type.GetProperty("Name");
Console.WriteLine(property.GetValue(person));
// 反射修改Age字段
FieldInfo field = type.GetField("Age", BindingFlags.NonPublic | BindingFlags.Instance);
field.SetValue(person, 20);
Console.WriteLine(person.Age);
Console.ReadKey();
}
}
class Person
{
public string Name { get; set; }
private int Age;
public Person(string name, int age)
{
this.Name = name;
this.Age = age;
}
}
}
在上面的示例中,我们首先使用typeof操作符获取Person类型的Type对象,然后创建了一个Person对象。接着,我们使用Type对象的GetProperty方法获取Name属性的PropertyInfo对象,并使用GetValue方法获取属性值。另外,我们也通过Type对象的GetField方法获取Age字段的FieldInfo对象,并使用SetValue方法修改字段的值。最终输出了结果。
总结
反射是C#语言中非常重要的一个特性,可以帮助我们在运行时访问和操作对象的各个成员。在使用反射时,需要先获取目标类型的Type对象,然后通过Type对象访问对象的各个成员,包括属性、方法、字段、事件等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#使用反射调用类型成员示例 - Python技术站