C#訪問及調(diào)用類中私有成員與方法示例代碼
開發(fā)背景
開發(fā)工具:VS2017
語言:C#
DotNet版本:.Net FrameWork 4.0及以上
系統(tǒng):Win10 X64
一、首先建立一個控制臺APP,并命名為ConsoleApp,如下圖所示:
二、新建一個Person類
并在類里面添加兩個成員,一個是name字段,另外一個是Display方法,該方法帶有一個“前綴”輸入?yún)?shù)prefix,用于加在name字段前面,如下代碼所示:
class Person { string name; void Display(string prefix) { Console.WriteLine($"{prefix},{name}"); } }
三、將System.Reflection引用進來,這里是本隨筆的關鍵所在
如下圖所示:
using System.Reflection;
四、如何設置及訪問name字段?
在這里我們使用反射技術,使用Type類里的反射機制進行訪問,
1)公用部分,具體代碼如下:
Person person = new Person(); Type type = typeof(Person); BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Instance; FieldInfo fInfo = type.GetField("name", flags);
2)設置name字段,設置方法如下代碼所示:
fInfo.SetValue(person,"CNXY");
3)訪問name字段,訪問方法如下代碼所示:
var name = fInfo.GetValue(person);
4)name字段結(jié)果如下:
說明:
BindingFlags.NonPublic:搜索非公有方法的成員;
BindingFlags.Instance:搜索成員實例,包括字段及方法等。
五、如何訪問Display私有方法?
同樣,借用第四部分代碼(person及flags),具體代碼如下:
MethodInfo mInfo = type.GetMethod("Display",flags); mInfo.Invoke(person, new object[] { "Hello" });
輸出結(jié)果如下:
說明:
Invoke用于調(diào)用方法,后面的參數(shù)使用數(shù)組的方法,如有一個參數(shù),則輸入一個參數(shù)的object數(shù)組,如有多個參數(shù),則輸入多個參數(shù)的object數(shù)組。
六、源代碼如下:
http://xiazai.jb51.net/201806/yuanma/ConsoleApp_jb51.rar
七、實際用處
System.Windows.Forms下面有一個類,名叫NotifyIcon,其設置的Text只能是63個字符,所想輸入大于63個字符,如下設置方法是行不通的,代碼如下:
NotifyIcon ni = new NotifyIcon(); ni.Text = "64個字符(實際有64個字符,這里并沒有達到個數(shù),僅作展示)";
那么,我們必須另外的方法來繞過NotifyIcon的限制,這里使用了反射技術(也就是以上所說的),代碼如下:
NotifyIcon ni = new NotifyIcon(); string text = "大于63個字符,小于127個字符的字符串"; 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 });
以上的限制個數(shù)為大于63個,小于127個。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
使用C#獲取遠程圖片 Form用戶名與密碼Authorization認證的實現(xiàn)
本篇文章介紹了,使用C#獲取遠程圖片 Form用戶名與密碼Authorization認證的實現(xiàn)。需要的朋友參考下2013-04-04javascript函數(shù)中執(zhí)行c#函數(shù)的方法
這篇文章主要介紹了javascript和c#函數(shù)和變量互相調(diào)用的方法,大家參考使用吧2014-01-01淺談C#各種數(shù)組直接的數(shù)據(jù)復制/轉(zhuǎn)換
下面小編就為大家?guī)硪黄獪\談C#各種數(shù)組直接的數(shù)據(jù)復制/轉(zhuǎn)換。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08C#實現(xiàn)將TextBox綁定為KindEditor富文本
KindEditor?依靠出色的用戶體驗和領先的技術提供富文本編輯功能,是一款非常受歡迎的HTML在線編輯器,下面我們就來看看C#如何將TextBox綁定為KindEditor富文本吧2024-04-04