雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C#教程

當(dāng)前位置:主頁 > 軟件編程 > C#教程 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊:

開發(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í)價值,如果有疑問大家可以留言交流,謝謝大家對我們的支持。

上一篇:C#使用private font改變PDF文件的字體詳解

欄    目:C#教程

下一篇:C#格式化數(shù)字字符串的方法

本文標(biāo)題:C#訪問及調(diào)用類中私有成員與方法示例代碼

本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/5155.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有