反射(reflection)使用方法

//反射
public static void Reflection()
{對象

            //調用非靜態方法get

            // 1.Load(命名空間名稱),GetType(命名空間.類名)
            Type type = Assembly.Load("ConsoleApp").GetType("ConsoleApp.Program");//動態加載dll 並獲取類型
            //2.GetMethod(須要調用的方法名稱)
            MethodInfo method = type.GetMethod("GetReflect", new Type[] { typeof(string), typeof(int) });
            // 3.調用的實例化方法須要建立類型的一個實例
            object obj = Activator.CreateInstance(type);
            //4.方法須要傳入的參數
            object[] parameters = new object[] { "xxx", 10 };
            // 5.調用方法
            string result = (string)method.Invoke(obj, parameters);string

 

            //調用靜態方法it

            type.InvokeMember("GetReflect", System.Reflection.BindingFlags.InvokeMethod | System.Reflection.BindingFlags.Static |
            System.Reflection.BindingFlags.Public, null, null, new object[] { "sss", 15 });io

 

            //獲取方法名稱class

            MethodInfo[] info = typeof(Program).GetMethods();
            foreach (MethodInfo item in info)
            {
                Console.WriteLine(item.Name);
                var parames = item.GetParameters();
                foreach(var parame in parames)
                {
                    Console.WriteLine(parame.Name + "--" + parame.ParameterType.Name);
                }
            }object

 

           //獲取對象的屬性及類型
            Type tt = typeof(User);
            var fields = tt.GetProperties();
            foreach (var item in fields)
            {
                Console.WriteLine(item.Name + ":" + item.GetValue(user, null) + ":" + item.PropertyType);
            }foreach

 

            //獲取對象的屬性並賦值,調用類中的方法命名空間

            Type projectType = typeof(User);
            object projectInstance = Activator.CreateInstance(projectType);反射

            PropertyInfo propertyName = projectType.GetProperty("name");
            propertyName.SetValue(projectInstance, "小明");
            var projectName = propertyName.GetValue(projectInstance);

            PropertyInfo propertyAge = projectType.GetProperty("age");
            propertyAge.SetValue(projectInstance, 99, null);
            var projectAge = propertyAge.GetValue(projectInstance);

            Console.WriteLine("姓名:{0} 年齡:{1}", projectName, projectAge);

            MethodInfo method1 = projectType.GetMethod("GetReflect", new Type[] { typeof(string), typeof(int) });
            object[] parsArray = { "武大郎",55 };
            method1.Invoke(projectInstance, parsArray);

}

 public static string GetStaticReflect(string name, int age)
 {
            Console.WriteLine("反射執行了" + name + "今年" + age + "歲了");
            return name + "123";
 }

 

    public class User
    {
        public string name { get; set; }
        public int age { get; set; }

        public void GetReflect(string name, int age)         {             Console.WriteLine("User反射執行了" + name + "今年" + age + "歲了");         }     }

相關文章
相關標籤/搜索