- 反射是在程序运行时动态地获取程序或程序集中的元数据,例如类、字段、属性、方法等。
- 通过枚举类型BindingFlags控制获取信息的范围。
using System;
using System.Reflection;
namespace _19
{
class Program
{
static void Main(string[] args)
{
MyClass myClass = new MyClass();
Console.WriteLine("*****公共静态字段*****");
FieldInfo[] fieldInfos1 = myClass.GetType().GetFields(BindingFlags.Public | BindingFlags.Static);
foreach (var item in fieldInfos1)
{
item.SetValue(myClass, 10);
Console.WriteLine($"字段名:{item.Name}\t类型:{item.FieldType}\t值:{item.GetValue(myClass)}");
}
Console.WriteLine();
Console.WriteLine("*****私有实例字段*****");
FieldInfo[] fieldInfos2 = myClass.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var item in fieldInfos2)
{
item.SetValue(myClass, "ACai");
Console.WriteLine($"字段名:{item.Name}\t类型:{item.FieldType}\t值:{item.GetValue(myClass)}");
}
Console.WriteLine();
Console.WriteLine("*****公共静态方法*****");
MethodInfo[] methodInfos1 = myClass.GetType().GetMethods(BindingFlags.Public | BindingFlags.Static);
foreach (var item in methodInfos1)
{
item.Invoke(myClass, new object[] { 20 });
}
Console.WriteLine();
Console.WriteLine("*****私有实例方法*****");
MethodInfo[] methodInfos2 = myClass.GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);
foreach (var item in methodInfos2)
{
item.Invoke(myClass, new object[] { "ABei" });
}
Console.WriteLine();
}
}
class MyClass
{
public static int age;
private string name;
public static void Print1(int age)
{
Console.WriteLine(age);
}
private void Print2(string name)
{
Console.WriteLine(name);
}
}
}