C#的反射機制

來源:互聯網
上載者:User

標籤:

using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Reflection;namespace codeTest{    class Program    {        static void Main(string[] args)        {            string str = "Hello";            //C#中基於System.Type的反射             Type t = str.GetType();            Console.WriteLine(t.FullName);            Type t2 = Type.GetType("System.String", false, true);            Console.WriteLine(t2.FullName);            Type t3 = typeof(string);            Console.WriteLine(t3.FullName);            //C#中對於方法、屬性等的反射             //GetMethods(t, BindingFlags.Public | BindingFlags.Instance);            Console.WriteLine("{0}", t.GetMethod("Copy"));            t.GetProperties();            t.GetFields();            //C#中動態載入以及延遲綁定               //擷取程式集             Assembly assembly = Assembly.Load("codeTest");            //Assembly assembly2 = Assembly.LoadFrom("codeTest.dll");            //從程式集中擷取指定物件類型;            Type type = assembly.GetType("codeTest.User");            //使用Activator建立執行個體(無參數建構函式)            var user1 = Activator.CreateInstance(type);            //使用Activator建立執行個體(帶參數建構函式)            var user2 = Activator.CreateInstance(type, "薄暮");            //使用Assembly建立執行個體(無參數建構函式)            var user3 = assembly.CreateInstance("codeTest.User");            //反射無參建構函式            ConstructorInfo constructor1 = type.GetConstructor(new Type[] { });            var user4 = constructor1.Invoke(new object[] { });            //反射有參建構函式             ConstructorInfo constructor2 = type.GetConstructor(new Type[] { typeof(string) });            var user5 = constructor2.Invoke(new object[] { "薄暮" });            //調用public函數(無參數)            type.InvokeMember("PublicShow",                              BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, user1,                              null);            //調用public函數(帶參數)            string returnValue =                type.InvokeMember("GetString",                                  BindingFlags.InvokeMethod | BindingFlags.OptionalParamBinding, null, user1,                                  new object[] { "薄暮" }) as string;            // 調用靜態方法                   string returnValue2 =                type.InvokeMember("StaticMethod", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,                                  null, null, new object[] { }) as string;            // 調用私人方法 .                   type.InvokeMember("PrivateShow",                              BindingFlags.InvokeMethod | BindingFlags.NonPublic | BindingFlags.Instance, null, user1,                              new object[] { });            //反射屬性            var Name =                type.InvokeMember("Name", BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance, null,                                  user1, new object[] { }) as string;            //設定屬性(設定Name屬性為"新屬性")            type.InvokeMember("Name", BindingFlags.SetProperty | BindingFlags.Public | BindingFlags.Instance, null,                                  user1, new object[] { "新屬性" });            //反射欄位            string Field =                type.InvokeMember("Field", BindingFlags.GetField | BindingFlags.Public | BindingFlags.Instance, null,                                  user1, new object[] { }) as string;            //設定欄位(設定Field欄位為"新欄位")            type.InvokeMember("Field", BindingFlags.SetField | BindingFlags.Public | BindingFlags.Instance, null,                                  user1, new object[] { "新欄位" });            Console.ReadLine();        }        public static void GetMethods(Type t, BindingFlags f)        {            MethodInfo[] info = t.GetMethods(f);            foreach (var item in info)            {                Console.WriteLine("{0}", item.Name);            }        }    }    public class User    {        //欄位        public string Field;        //屬性        public string Name { get; set; }        //建構函式        public User()        {            this.Name = "無參構造";        }        public User(string name)        {            this.Name = name;        }        //public函數        public void PublicShow()        {            Console.WriteLine(string.Format("反射調用一個public方法"));        }        //private函數        private void PrivateShow()        {            Console.WriteLine(string.Format("反射調用一個Private方法"));        }        //static函數        public static string StaticMethod()        {            return "反射調用了一個Static方法";        }        //帶參帶傳回值函數        public string GetString(string name)        {            return string.Format("大家好,我的名字是:{0}!", name);        }        //事件        public event EventHandler eventHandler;        //事件處理函數        public void DoEvent()        {            if (eventHandler != null)                eventHandler(null, EventArgs.Empty);        }    }}

 

C#的反射機制

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.