国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

私有方法是封閉的?使用反射來調用一個對象的私有方法。

2019-11-17 02:24:13
字體:
來源:轉載
供稿:網友

私有方法是封閉的?使用反射來調用一個對象的私有方法。

當我們學習C# 時接觸的第一套關鍵字 可能就是 PRivate, Public, protect。

Private的定義是: 用此關鍵字定義的方法和變量只能在對象內部使用。

但是這是絕對的么?有沒有辦法在調用者的空間中使用Private定義的方法或者變量呢?

讓我們定義如下一個類:

  1. public class testObj
  2. {
  3. public string PublicValue { get; set; }
  4. private string _privateValue;
  5. public testObj()
  6. {
  7. _privateValue = "private";
  8. PublicValue = "public";
  9. }
  10. public testObj(string value)
  11. {
  12. _privateValue = "private_" + value;
  13. PublicValue = "public_" + value;
  14. }
  15. private string returnPrivateValue()
  16. {
  17. return _privateValue;
  18. }
  19. }

那在這個簡單程序中我們可以訪問_priavateValue么?

  1. static void Main(string[] args)
  2. {
  3. testObj to = new testObj("test");
  4. Console.WriteLine("obj public parameter:{0}",to.PublicValue);
  5. Console.WriteLine("obj public parameter:{0}", to. returnPrivateValue());
  6. Console.Read();
  7. }

當我們嘗試編譯這段簡單程序時會得到一個編譯錯誤。

'PrivateCallByReflection.testObj.returnPrivateValue()' is inaccessible due to its protection level

那么private 真的就是安全的,只能內部訪問的么?

一個小小的trick即可得到我們想要的結果

  1. static void Main(string[] args)
  2. {
  3. testObj to = new testObj("test");
  4. Console.WriteLine("obj public parameter:{0}",to.PublicValue);
  5. //Console.WriteLine("obj public parameter:{0}", to.returnPrivateValue());
  6. MethodInfo privateMethod = typeof(testObj).GetMethod("returnPrivateValue", BindingFlags.Instance | BindingFlags.NonPublic);
  7. Console.WriteLine("obj private method 'returnPrivateValue' return :{0}", privateMethod.Invoke(to, new object[] { }));
  8. Console.Read();
  9. }

請注意下劃線標示的代碼。

反射幫助我們訪問了一個Private的方法。

無下限的反射,真的是沒什么不可以的。。。。。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博乐市| 林西县| 怀集县| 宣化县| 桐乡市| 廉江市| 阳城县| 万山特区| 商水县| 文山县| 射阳县| 阿克陶县| 丰镇市| 封丘县| 云霄县| 新密市| 邹平县| 双鸭山市| 金门县| 洛川县| 三原县| 威远县| 常山县| 宣汉县| 雅江县| 嘉义市| 公安县| 广东省| 定结县| 游戏| 原平市| 温州市| 邹平县| 静海县| 威宁| 兴文县| 普定县| 武功县| 昭觉县| 洞头县| 东山县|