亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

詳解C#中訪問私有成員的方法

2023-05-08 19:02:31
字體:
來源:轉載
供稿:網友

首先訪問一個類的私有成員不是什么好做法。大家都知道私有成員在外部是不能被訪問的。一個類中會存在很多私有成員:如私有字段、私有屬性、私有方法。對于私有成員造訪,可以套用下面這種非常好的方式去解決。


 
  1. private string name;  
  2. public string Name  
  3. {  
  4.     get 
  5.     {  
  6.         return name;  
  7.     }  
  8.     set 
  9.     {  
  10.         name = value;  
  11.     }  

但是有時候,源代碼是別人的,只提供給你dll?;蛘吣闳ゾS護別人的代碼,源代碼卻有丟失。這樣的情況或許你想知道私有成員的值,甚至去想直接調用類里面的私有方法。那怎么辦呢?在.net中訪問私有成員不是很難,這篇文章提供幾個簡單的方法讓你如愿以償。

為了讓代碼用起來優雅,使用擴展方法去實現。

1、得到私有字段的值:


 
  1. public static T GetPrivateField<T>(this object instance, string fieldname)  
  2. {  
  3.     BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;  
  4.     Type type = instance.GetType();  
  5.     FieldInfo field = type.GetField(fieldname, flag);  
  6.     return (T)field.GetValue(instance);  

2、得到私有屬性的值:


 
  1. public static T GetPrivateProperty<T>(this object instance, string propertyname)  
  2. {  
  3.     BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;  
  4.     Type type = instance.GetType();  
  5.     PropertyInfo field = type.GetProperty(propertyname, flag);  
  6.     return (T)field.GetValue(instance, null);  

3、設置私有成員的值:


 
  1. public static void SetPrivateField(this objectinstance, stringfieldname, objectvalue)   
  2. {   
  3.     BindingFlagsflag = BindingFlags.Instance | BindingFlags.NonPublic;   
  4.     Typetype = instance.GetType();   
  5.     FieldInfofield = type.GetField(fieldname, flag);   
  6.     field.SetValue(instance, value);   
  7. }  

4、設置私有屬性的值:


 
  1. public static void SetPrivateProperty(this objectinstance, stringpropertyname, objectvalue)   
  2. {   
  3.     BindingFlagsflag = BindingFlags.Instance | BindingFlags.NonPublic;   
  4.     Typetype = instance.GetType();   
  5.     PropertyInfofield = type.GetProperty(propertyname, flag);   
  6.     field.SetValue(instance, value, null);   
  7. }  

5、調用私有方法:


 
  1. public static T CallPrivateMethod<T>(this object instance, string name, params object[] param)  
  2. {  
  3.     BindingFlags flag = BindingFlags.Instance | BindingFlags.NonPublic;  
  4.     Type type = instance.GetType();  
  5.     MethodInfo method = type.GetMethod(name, flag);  
  6.     return (T)method.Invoke(instance, param);  

測試:

下面我們使用一個測試類,進行測試。新建一個類庫項目,測試的類代碼如下:


 
  1. public class TestClass  
  2. {  
  3.  
  4.     public TestClass()  
  5.     {  
  6.         privatefield1 = 1;  
  7.         privatefield2 = 99;  
  8.         PrivateFieldA = "Lo";  
  9.         PrivateFieldB = "ve";  
  10.     }  
  11.  
  12.     private int privatefield1;  
  13.     private int privatefield2;  
  14.     
  15.  
  16.     private string PrivateFieldA  
  17.     {  
  18.         get;  
  19.         set;  
  20.     }  
  21.     private string PrivateFieldB  
  22.     {  
  23.         get;  
  24.         set;  
  25.     }  
  26.  
  27.  
  28.     private int Add()  
  29.     {  
  30.         return privatefield1 + privatefield2;  
  31.     }  
  32.     private string Join()  
  33.     {  
  34.         return PrivateFieldA + PrivateFieldB;  
  35.     }  

將上面類庫的dll引入控制臺項目中。使用下面代碼去使用這個類的私有成員:


 
  1. TestClass obj = new TestClass();  
  2. System.Console.WriteLine("私有字段");  
  3. System.Console.WriteLine(obj.GetPrivateField<int>("privatefield1"));  
  4. System.Console.WriteLine(obj.GetPrivateField<int>("privatefield2"));  
  5.  
  6. System.Console.WriteLine("私有屬性");  
  7. System.Console.WriteLine(obj.GetPrivateProperty<string>("PrivateFieldA"));  
  8. System.Console.WriteLine(obj.GetPrivateProperty<string>("PrivateFieldB"));  
  9.  
  10. System.Console.WriteLine("私有方法");  
  11. System.Console.WriteLine(obj.CallPrivateMethod<int>("Add",null));  
  12. System.Console.WriteLine(obj.CallPrivateMethod<string>("Join"null));  
  13.  
  14. System.Console.WriteLine("修改私有屬性");  
  15. obj.SetPrivateProperty("PrivateFieldA""hello");  
  16. obj.SetPrivateProperty("PrivateFieldB""world");  
  17. System.Console.WriteLine(obj.CallPrivateMethod<string>("Join"null));  
  18. System.Console.Read(); 

結果如下:

hhh

總結:實現對類私有成員的訪問。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产有码一区二区| 亚洲天堂男人的天堂| 国产精品久久二区| 91av在线免费观看视频| 亚洲xxxx在线| 欧美综合激情网| 狠狠操狠狠色综合网| 欧美制服第一页| 日韩中文字幕av| 日本午夜人人精品| 69久久夜色精品国产69乱青草| 亚洲毛茸茸少妇高潮呻吟| 91免费精品视频| 日韩高清免费观看| 欧美精品18videosex性欧美| 91精品国产色综合久久不卡98口| 97精品免费视频| 久久精品国产亚洲7777| 国产精品十八以下禁看| 欧美第一淫aaasss性| 97国产真实伦对白精彩视频8| 亚洲人av在线影院| 色偷偷av一区二区三区乱| 日韩av在线免费观看| 欧美极度另类性三渗透| 亚洲色图日韩av| 91中文字幕在线观看| 欧美疯狂做受xxxx高潮| 欧美精品久久久久| 亚洲一区二区自拍| 欧美精品电影免费在线观看| 国产精品日韩欧美| 国产精品网站入口| 91精品国产91久久久久久不卡| 亚洲永久免费观看| 亚洲网站在线观看| 精品呦交小u女在线| 成人激情视频小说免费下载| 啊v视频在线一区二区三区| xxx一区二区| 黑人巨大精品欧美一区二区免费| 欧美日韩电影在线观看| 69视频在线播放| 久久久综合av| 日韩中文字在线| 国产一区二区动漫| 国产成人精品免费久久久久| 97视频免费在线看| 欧美第一黄色网| 97在线视频国产| 91精品国产乱码久久久久久蜜臀| 欧美激情一级精品国产| 亚洲高清久久网| 日韩欧美极品在线观看| 久久久精品视频成人| 国产91免费看片| 久久免费观看视频| 国内揄拍国内精品少妇国语| 久久人人爽国产| 色先锋资源久久综合5566| 日韩精品免费观看| 欧美日在线观看| 91在线精品播放| 青青a在线精品免费观看| 国产啪精品视频网站| 国产精品视频区| 亚洲人成在线播放| 亚洲精品视频播放| 欧美在线观看日本一区| 色婷婷综合久久久久| 岛国精品视频在线播放| 国产日产久久高清欧美一区| 日本免费久久高清视频| 久久综合免费视频影院| 中文字幕视频在线免费欧美日韩综合在线看| 欧美久久精品午夜青青大伊人| 成人444kkkk在线观看| 精品国产网站地址| 精品亚洲男同gayvideo网站| 色天天综合狠狠色| 18久久久久久| 色偷偷噜噜噜亚洲男人| 亚洲人在线观看| 亚洲色图综合久久| 欧美乱人伦中文字幕在线| 亚洲福利在线视频| 欧美性受xxxx白人性爽| www.亚洲一二| 久久99精品国产99久久6尤物| 亚洲男人天堂手机在线| 欧美色欧美亚洲高清在线视频| 国产精品久久久久久五月尺| 亚洲第一av网| 992tv成人免费影院| 欧美亚洲视频在线观看| 国产成人精品在线| 992tv成人免费影院| 国产91精品不卡视频| 色综合色综合网色综合| 日韩av在线看| 色婷婷av一区二区三区久久| 国a精品视频大全| 欧美成人激情视频免费观看| 国产精品美乳在线观看| 狠狠躁18三区二区一区| 美女黄色丝袜一区| 7777精品视频| 91免费国产视频| 国产成人精品一区二区在线| 亚洲国产精品中文| 欧美激情18p| 国产精品久久久久久av下载红粉| 精品国产自在精品国产浪潮| 国产不卡视频在线| 亚洲人成网站免费播放| 亚洲久久久久久久久久| 日韩激情在线视频| 中文字幕一精品亚洲无线一区| 91av在线不卡| 色综合天天综合网国产成人网| 欧美一级大胆视频| 91麻豆桃色免费看| 国产伦精品免费视频| 美女黄色丝袜一区| 69视频在线免费观看| 久久99精品久久久久久青青91| 国产精品欧美日韩久久| 亚洲男人av在线| 992tv成人免费影院| 欧美精品在线免费| 欧美激情视频一区二区| 久久精品中文字幕免费mv| 久久午夜a级毛片| 日本韩国欧美精品大片卡二| 国产日本欧美一区二区三区| 亚洲精品电影久久久| 成人国产精品久久久久久亚洲| 国产午夜精品一区理论片飘花| 国产精品一香蕉国产线看观看| 91伊人影院在线播放| 色偷偷噜噜噜亚洲男人| 精品国产欧美一区二区五十路| 亚洲白拍色综合图区| 国产成人一区二区三区电影| 日韩美女视频免费看| 欧美精品免费在线| 成人在线视频网| 26uuu久久噜噜噜噜| 亚洲欧美日韩国产中文| 国产精品午夜国产小视频| 国产精品久久久久久av下载红粉| 亚洲福利视频网| 国产成人综合一区二区三区| 亚洲人成毛片在线播放| 欧美在线精品免播放器视频| 国产精品白嫩美女在线观看| 精品亚洲国产视频| 九九热在线精品视频| 精品中文字幕乱| 欧美成人免费大片| 欧美成人午夜影院| 日韩av在线精品| 97视频在线观看免费高清完整版在线观看| 永久555www成人免费|