C# 反射 Reflection 進(jìn)階
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
反射是C#編程中的一個(gè)重要特性,它允許程序在運(yùn)行時(shí)獲取和操作對(duì)象的信息,而無(wú)需事先創(chuàng)建對(duì)象或者指定對(duì)象的具體實(shí)現(xiàn)。通過(guò)反射,程序可以動(dòng)態(tài)地創(chuàng)建、獲取、修改和刪除對(duì)象,從而實(shí)現(xiàn)更加靈活和強(qiáng)大的編程能力。 反射的實(shí)現(xiàn)依賴于程序運(yùn)行時(shí)的環(huán)境,其中包括.NET框架中的類型信息和字段、方法、屬性等信息。在C#中,程序可以通過(guò)System.Reflection命名空間中的類和接口來(lái)訪問(wèn)和操作這些信息。例如,使用Type類可以獲取指定類型的類名、方法名、字段名等信息;使用MethodInfo類可以獲取指定方法的方法名、參數(shù)類型、返回值類型等信息;使用FieldInfo類可以獲取指定字段的字段名、數(shù)據(jù)類型、訪問(wèn)權(quán)限等信息。 正文通過(guò)Type創(chuàng)建一個(gè)類的實(shí)例 做一個(gè)基礎(chǔ)類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()); } } 實(shí)例化這個(gè)類 private void btnCreateClass_Click(object sender, EventArgs e) { Type t = Type.GetType("s77.Machine"); //構(gòu)造器的參數(shù) object[] args = new object[] { "設(shè)備2", "北京", 9000 }; //創(chuàng)建對(duì)象 object obj =Activator.CreateInstance(t,new object[] {"設(shè)備2","北京"}); //獲取方法的信息 MethodInfo method = t.GetMethod("Run"); //調(diào)用方法的一些標(biāo)志位,這里的含義是Public并且是實(shí)例方法,這也是默認(rèn)的值 BindingFlags flag = BindingFlags.Public | BindingFlags.Instance; method.Invoke(obj,new object[] { }); } 動(dòng)態(tài)創(chuàng)建一個(gè)委托 調(diào)整一個(gè)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");//創(chuàng)建委托 string ret = method("設(shè)備"); MessageBox.Show(ret);} 該文章在 2024/3/30 23:56:16 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |