C# 反射 Reflection 進階
當前位置:點晴教程→知識管理交流
→『 技術文檔交流 』
反射是C#編程中的一個重要特性,它允許程序在運行時獲取和操作對象的信息,而無需事先創建對象或者指定對象的具體實現。通過反射,程序可以動態地創建、獲取、修改和刪除對象,從而實現更加靈活和強大的編程能力。 反射的實現依賴于程序運行時的環境,其中包括.NET框架中的類型信息和字段、方法、屬性等信息。在C#中,程序可以通過System.Reflection命名空間中的類和接口來訪問和操作這些信息。例如,使用Type類可以獲取指定類型的類名、方法名、字段名等信息;使用MethodInfo類可以獲取指定方法的方法名、參數類型、返回值類型等信息;使用FieldInfo類可以獲取指定字段的字段名、數據類型、訪問權限等信息。 正文通過Type創建一個類的實例 做一個基礎類Machine public class Machine { public string Name { get; set; } public string Location { get; set; } public decimal Amount = 1; public Machine() { } public Machine(string name, string location) { Name = name; Location = location; } public bool Run() { MessageBox.Show(this.Name+" "+"Run" + DateTime.Now.ToString()); return true; } public void Stop() { MessageBox.Show(this.Name + " " + "Stop" + DateTime.Now.ToString()); } } 實例化這個類 private void btnCreateClass_Click(object sender, EventArgs e) { Type t = Type.GetType("s77.Machine"); //構造器的參數 object[] args = new object[] { "設備2", "北京", 9000 }; //創建對象 object obj =Activator.CreateInstance(t,new object[] {"設備2","北京"}); //獲取方法的信息 MethodInfo method = t.GetMethod("Run"); //調用方法的一些標志位,這里的含義是Public并且是實例方法,這也是默認的值 BindingFlags flag = BindingFlags.Public | BindingFlags.Instance; method.Invoke(obj,new object[] { }); } 動態創建一個委托 調整一個Machine 類 delegate string DeleStatus(string name); public class Machine { public string Name { get; set; } public string Location { get; set; } public decimal Amount = 1; public Machine() { } public Machine(string name, string location) { Name = name; Location = location; } public bool Run() { MessageBox.Show(this.Name+" "+"Run" + DateTime.Now.ToString()); return true; } public void Stop() { MessageBox.Show(this.Name + " " + "Stop" + DateTime.Now.ToString()); } public string Status(string name) { return name+" OK"; } }
private void btnCreateDelegate_Click(object sender, EventArgs e){ Type t = Type.GetType("s77.DeleStatus");//取得委托Type DeleStatus method = (DeleStatus)Delegate.CreateDelegate(t, machine, "Status");//創建委托 string ret = method("設備"); MessageBox.Show(ret);} 該文章在 2024/3/30 23:56:16 編輯過 |
關鍵字查詢
相關文章
正在查詢... |