開發(fā)背景
公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來(lái)驚喜。創(chuàng)新互聯(lián)公司推出灤南免費(fèi)做網(wǎng)站回饋大家。
開發(fā)工具:VS2017
語(yǔ)言:C#
DotNet版本:.Net FrameWork 4.0及以上
系統(tǒng):Win10 X64
一、首先建立一個(gè)控制臺(tái)APP,并命名為ConsoleApp,如下圖所示:
二、新建一個(gè)Person類
并在類里面添加兩個(gè)成員,一個(gè)是name字段,另外一個(gè)是Display方法,該方法帶有一個(gè)“前綴”輸入?yún)?shù)prefix,用于加在name字段前面,如下代碼所示:
class Person { string name; void Display(string prefix) { Console.WriteLine($"{prefix},{name}"); } }
三、將System.Reflection引用進(jìn)來(lái),這里是本隨筆的關(guān)鍵所在
如下圖所示:
using System.Reflection;
四、如何設(shè)置及訪問(wèn)name字段?
在這里我們使用反射技術(shù),使用Type類里的反射機(jī)制進(jìn)行訪問(wèn),
1)公用部分,具體代碼如下:
Person person = new Person(); Type type = typeof(Person); BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance; FieldInfo fInfo = type.GetField("name", flags);
2)設(shè)置name字段,設(shè)置方法如下代碼所示:
fInfo.SetValue(person,"CNXY");
3)訪問(wèn)name字段,訪問(wèn)方法如下代碼所示:
var name = fInfo.GetValue(person);
4)name字段結(jié)果如下:
說(shuō)明:
BindingFlags.NonPublic:搜索非公有方法的成員;
BindingFlags.Instance:搜索成員實(shí)例,包括字段及方法等。
五、如何訪問(wèn)Display私有方法?
同樣,借用第四部分代碼(person及flags),具體代碼如下:
MethodInfo mInfo = type.GetMethod("Display",flags); mInfo.Invoke(person, new object[] { "Hello" });
輸出結(jié)果如下:
說(shuō)明:
Invoke用于調(diào)用方法,后面的參數(shù)使用數(shù)組的方法,如有一個(gè)參數(shù),則輸入一個(gè)參數(shù)的object數(shù)組,如有多個(gè)參數(shù),則輸入多個(gè)參數(shù)的object數(shù)組。
六、源代碼如下:
http://xiazai.jb51.net/201806/yuanma/ConsoleApp_jb51.rar
七、實(shí)際用處
System.Windows.Forms下面有一個(gè)類,名叫NotifyIcon,其設(shè)置的Text只能是63個(gè)字符,所想輸入大于63個(gè)字符,如下設(shè)置方法是行不通的,代碼如下:
NotifyIcon ni = new NotifyIcon(); ni.Text = "64個(gè)字符(實(shí)際有64個(gè)字符,這里并沒(méi)有達(dá)到個(gè)數(shù),僅作展示)";
那么,我們必須另外的方法來(lái)繞過(guò)NotifyIcon的限制,這里使用了反射技術(shù)(也就是以上所說(shuō)的),代碼如下:
NotifyIcon ni = new NotifyIcon(); string text = "大于63個(gè)字符,小于127個(gè)字符的字符串"; if (text.Length >= 128) throw new ArgumentOutOfRangeException("Text limited to 127 characters"); Type t = typeof(NotifyIcon); BindingFlags hidden = BindingFlags.NonPublic | BindingFlags.Instance; t.GetField("text", hidden).SetValue(ni, text); if ((bool)t.GetField("added", hidden).GetValue(ni)) t.GetMethod("UpdateIcon", hidden).Invoke(ni, new object[] { true });
以上的限制個(gè)數(shù)為大于63個(gè),小于127個(gè)。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)創(chuàng)新互聯(lián)的支持。