最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2018年06月03日 11:47:55   作者:cnc  
訪問一個類的私有成員不是什么好做法,大家也都知道私有成員在外部是不能被訪問的,這篇文章主要給大家介紹了關(guān)于C#訪問及調(diào)用類中私有成員與方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

開發(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引用進(jìn)來,這里是本隨筆的關(guān)鍵所在

如下圖所示:

using System.Reflection;

四、如何設(shè)置及訪問name字段?

在這里我們使用反射技術(shù),使用Type類里的反射機(jī)制進(jì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)訪問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,其設(shè)置的Text只能是63個字符,所想輸入大于63個字符,如下設(shè)置方法是行不通的,代碼如下:

NotifyIcon ni = new NotifyIcon();
ni.Text = "64個字符(實際有64個字符,這里并沒有達(dá)到個數(shù),僅作展示)";

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

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)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • c#添加Newtonsoft.Json包的操作

    c#添加Newtonsoft.Json包的操作

    這篇文章主要介紹了c#添加Newtonsoft.Json包的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • OpenCvSharp圖像的修改和保存以及掩膜操作

    OpenCvSharp圖像的修改和保存以及掩膜操作

    這篇文章主要介紹了OpenCvSharp圖像的修改和保存以及掩膜操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 利用C#實現(xiàn)合并Word文檔功能

    利用C#實現(xiàn)合并Word文檔功能

    合并Word文檔可以快速地將多份編輯好的文檔合在一起,避免復(fù)制粘貼時遺漏內(nèi)容,以及耗費不必要的時間。本文將分為以下兩部分介紹如何通過C#合并Word文檔,并附上VB.NET代碼供大家參考,希望對大家有所幫助
    2022-12-12
  • C#確保只有一個實例在運行的方法

    C#確保只有一個實例在運行的方法

    這篇文章主要介紹了C#確保只有一個實例在運行的方法,涉及C#進(jìn)程操作的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • WPF實現(xiàn)播放RTSP視頻流

    WPF實現(xiàn)播放RTSP視頻流

    這篇文章主要為大家詳細(xì)介紹了WPF實現(xiàn)播放RTSP視頻流的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • 淺談C# 非模式窗體show()和模式窗體showdialog()的區(qū)別

    淺談C# 非模式窗體show()和模式窗體showdialog()的區(qū)別

    下面小編就為大家?guī)硪黄獪\談C# 非模式窗體show()和模式窗體showdialog()的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • Winform實現(xiàn)抓取web頁面內(nèi)容的方法

    Winform實現(xiàn)抓取web頁面內(nèi)容的方法

    這篇文章主要介紹了Winform實現(xiàn)抓取web頁面內(nèi)容的方法,代碼只有短短幾行,但是功能很實用,需要的朋友可以參考下
    2014-09-09
  • C#實現(xiàn)日期時間的格式化輸出的示例詳解

    C#實現(xiàn)日期時間的格式化輸出的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C#實現(xiàn)日期時間的格式化輸出的相關(guān)資料,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以參考一下
    2023-03-03
  • c#深拷貝文件夾示例

    c#深拷貝文件夾示例

    這篇文章主要介紹了c#深拷貝文件夾示例,需要的朋友可以參考下
    2014-04-04
  • c#利用webmail郵件系統(tǒng)發(fā)送郵件示例分享

    c#利用webmail郵件系統(tǒng)發(fā)送郵件示例分享

    在C#中發(fā)送郵件的方式有2種,一種是使用webmail方式進(jìn)行發(fā)送,另外一種就是采用netmail發(fā)送的方式,這篇文章介紹了c#使用webmail方式發(fā)送郵件示例,大家參考使用吧
    2014-01-01

最新評論

连云港市| 开封市| 铅山县| 福建省| 广元市| 兴文县| 勐海县| 曲阜市| 雷山县| 绵竹市| 莱州市| 临邑县| 石城县| 鄢陵县| 弋阳县| 固阳县| 应用必备| 边坝县| 武山县| 内江市| 萝北县| 新疆| 海林市| 镇宁| 谷城县| 安徽省| 盘山县| 伊吾县| 微博| 竹溪县| 诏安县| 化德县| 广丰县| 盐津县| 平顺县| 永春县| 徐闻县| 平定县| 桐乡市| 兴国县| 宜城市|