一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C# - C#訪問及調用類中私有成員與方法示例代碼

C#訪問及調用類中私有成員與方法示例代碼

2022-02-24 14:07cnc C#

訪問一個類的私有成員不是什么好做法,大家也都知道私有成員在外部是不能被訪問的,這篇文章主要給大家介紹了關于C#訪問及調用類中私有成員與方法的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

開發背景

開發工具:vs2017

語言:c#

dotnet版本:.net framework 4.0及以上

系統:win10 x64

一、首先建立一個控制臺app,并命名為consoleapp,如下圖所示:

C#訪問及調用類中私有成員與方法示例代碼

二、新建一個person類

并在類里面添加兩個成員,一個是name字段,另外一個是display方法,該方法帶有一個“前綴”輸入參數prefix,用于加在name字段前面,如下代碼所示:

?
1
2
3
4
5
6
7
8
class person
 {
  string name;
  void display(string prefix)
  {
   console.writeline($"{prefix},{name}");
  }
 }

三、將system.reflection引用進來,這里是本隨筆的關鍵所在

如下圖所示:

?
1
using system.reflection;

四、如何設置及訪問name字段?

在這里我們使用反射技術,使用type類里的反射機制進行訪問,

1)公用部分,具體代碼如下:

?
1
2
3
4
person person = new person();
type type = typeof(person);
bindingflags flags = bindingflags.nonpublic | bindingflags.instance;
fieldinfo finfo = type.getfield("name", flags);

2)設置name字段,設置方法如下代碼所示:

?
1
finfo.setvalue(person,"cnxy");

3)訪問name字段,訪問方法如下代碼所示:

?
1
var name = finfo.getvalue(person);

4)name字段結果如下:

C#訪問及調用類中私有成員與方法示例代碼

說明:

bindingflags.nonpublic:搜索非公有方法的成員;

bindingflags.instance:搜索成員實例,包括字段及方法等。

五、如何訪問display私有方法?

同樣,借用第四部分代碼(person及flags),具體代碼如下:

?
1
2
methodinfo minfo = type.getmethod("display",flags);
minfo.invoke(person, new object[] { "hello" });

輸出結果如下:

C#訪問及調用類中私有成員與方法示例代碼

說明:

invoke用于調用方法,后面的參數使用數組的方法,如有一個參數,則輸入一個參數的object數組,如有多個參數,則輸入多個參數的object數組。

六、源代碼如下:

consoleapp.rar

七、實際用處

system.windows.forms下面有一個類,名叫notifyicon,其設置的text只能是63個字符,所想輸入大于63個字符,如下設置方法是行不通的,代碼如下:

?
1
2
notifyicon ni = new notifyicon();
ni.text = "64個字符(實際有64個字符,這里并沒有達到個數,僅作展示)";

那么,我們必須另外的方法來繞過notifyicon的限制,這里使用了反射技術(也就是以上所說的),代碼如下:

?
1
2
3
4
5
6
7
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 });

以上的限制個數為大于63個,小于127個。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:https://www.cnblogs.com/cncc/p/8249768.html

延伸 · 閱讀

精彩推薦
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
主站蜘蛛池模板: 99re这里只有精品视频 | 草莓绿巨人香蕉茄子芭乐 | 大jjjj免费看视频 | 97精品久久天干天天蜜 | a级片在线观看免费 | 韩国三级日本三级香港三级黄 | 超级乱淫变态伦短篇小说全集 | futa百合高肉全h | 奇米777狠狠 | 国产精品久久久久毛片 | 视频精品一区二区三区 | 天选之王漫画顾长歌免费阅读 | h版在线观看 | 女人狂吮男人命根gif视频 | 国产日韩高清一区二区三区 | 韩国久播影院理论片不卡影院 | 精品国产精品国产偷麻豆 | 男生的j桶女人屁免费视频 男生操男生 | 俄罗斯妈妈k8影院在线观看 | 91在线亚洲综合在线 | 精品国产91久久久久 | wc凹凸撒尿间谍女厕hd | 九九热在线免费观看 | 舔穴吸奶 | 精品一区二区三区 不卡高清 | 精品一区二区免费视频蜜桃网 | 欧美成人tv在线观看免费 | 黄在线观看www免费看 | 糖心视频在线观看 | 韩国一区二区三区 | 九九精品国产兔费观看久久 | 亚洲视频免费在线看 | 亚洲成av人在线视 | 日韩视频在线免费 | 日韩二区三区 | 女人是男人的未来1分49分 | 热辣小秘书办公室 | 精品久久99麻豆蜜桃666 | 久久九九久精品国产尤物 | 国产精品福利 | free性泰国女人hd |