using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace _001反射 { class Program { static void Main(string[] args) { //元数据:就是程序的字段方法,程序本身或程序集,文本信息 //反射:在程序运行状态下,我们获得元数据的行为,反射用到的是Type类 MyClass my = new MyClass(); //去设置反射对象 //1.找到反射对象的方式之1通过类的对象查找 Type type = my.GetType(); //2.通过类型查看反射对象 //Type type1 = typeof(MyClass); ////3.通过命名空间查找反射对象 //Type type2 = Type.GetType("_001反射.MyClass"); //Console.WriteLine(type2); //通过这里面的反射对象获取到所有的公有字段的信息 //FieldInfo[] fields = type.GetFields(); //foreach (var item in fields) //{ // Console.WriteLine(item); //} //object obj = Activator.CreateInstance(type); //fields[0].SetValue(obj, 20); //fields[1].SetValue(obj, "张三"); //fields[2].SetValue(obj, 30); //fields[3].SetValue(obj, 50); //foreach (var item in fields) //{ // Console.WriteLine(item.GetValue(obj)); //} //拿到反射对象的类型,命名空间和程序集 //Console.WriteLine(type.Name); //Console.WriteLine(type.Namespace); //Console.WriteLine(type.Assembly); //拿到反射对象的属性信息 //PropertyInfo[] info= type.GetProperties(); //foreach (var item in info) //{ // Console.WriteLine(item); //} //拿到反射对象的方法 //MethodInfo[] meInfo= type.GetMethods(); //foreach (var item in meInfo) //{ // Console.WriteLine(item); //} //拿到静态方法 //MethodInfo mi = type.GetMethod("Test3"); //mi.Invoke(null, null); //MethodInfo mii = type.GetMethod("Test4"); //mii.Invoke(null, new object[] { 10 }); ////拿到非静态方法 //MethodInfo me = type.GetMethod("Test1"); //object obj = Activator.CreateInstance(type); //me.Invoke(obj, null); //MethodInfo mee = type.GetMethod("Test2"); //mee.Invoke(obj,new object[] { "张三"}); //拿到程序集中的所有类型 Assembly ab= type.Assembly; Type[] t= ab.GetTypes(); foreach (var item in t) { Console.WriteLine(item); } } } }