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

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

C#反射 入門學習 01

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

C#反射 入門學習 01

前言

獲取方法的相關信息的兩種形式

反射是一種允許用戶獲得類信息的C#功能,Type對象映射它代表的底層對象;

在.Net 中, 一旦獲得了Type對象,就可以使用GetMethods()方法獲取此類型支持的方法列表;該方法的兩種形式:

MethodInfo [] GetMethods()

MethodInfo [] GetMethods(BindingFlags bindingflas) :它的參數帶有一些限制BindingFlags 是一個枚舉

枚舉成員 [DeclaredOnly,Instance ,Public] 枚舉成員的功能使用 在編譯器中使用"."符號后自己認真觀察 【相信你很快能夠理解】

ParameterInfo[] GetParameters() 方法返回一個方法的參數列表

下面用到的類 MyClass ,為了方便閱讀,我把它折疊了!

 1 class MyClass 2     { 3         int x; 4         int y; 5         public MyClass(int i, int j) 6         { 7             this.x = i; 8             this.y = j; 9         }10         public int Sum()11         {12             return x + y;13         }14         public bool IsBetween(int i)15         {16             if (x < i && i < y)17             {18                 return true;19             }20             return false;21         }22         public void Set(int a, int b)23         {24             x = a;25             y = b;26         }27         public void Set(double a, double b)28         {29             x = (int)a;30             y = (int)b;31         }32         public void Show()33         {34             Console.WriteLine("x: " + x + "  y:  " + y);35         }36     }
MyClass

Main:

 1  Type t = typeof(MyClass);//獲得一個表示MyClass類的Type對象 2             Console.WriteLine("獲取當前成員的名稱" + t.Name); 3             Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); 4             Console.WriteLine("支持的方法"); 5             #region 第一種形式 6             //MethodInfo[] mi = t.GetMethods();//顯示Class類中被支持的方法 7             // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 8             //方法GetMethods() 把 MyClass 的基類 object方法都顯示出來了 9             //下面我們說說  GetMethods() 的另外一種形式,有限制的顯示10             #endregion11             #region 第二種形式12             MethodInfo[] mi = t.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public);13             #endregion14             foreach (MethodInfo m in mi)15             {16                 //返回后打印出MyClass類中成員的類型(方法的返回值類型)極其方法名稱17                 Console.Write("  " + m.ReturnType.Name + "  " + m.Name + " (");//ReturnType獲取此方法的返回類型18                 ParameterInfo[] pi = m.GetParameters();//獲得方法的參數19                 for (int i = 0; i < pi.Length; i++)20                 {21                     Console.Write(pi[i].ParameterType.Name + "   " + pi[i].Name);//ParameterType 獲取該參數的Type(類型)22                     if (i+1<pi.Length)23                     {24                         Console.Write(", ");25                     }26                   27                 }28                 Console.WriteLine(")");29                 Console.WriteLine();30             }        36  38             Console.ReadKey();

使用反射調用方法

上面 討論了怎么獲取一個類型所支持的方法,然而為我們獲取對方法的調用做了充分的準備!

MethodInfo類中的Invoke() 方法提供了該技能!

它的一種形式: object Invoke(object obj,object [] paramenters)

obj 是一個對象引用,將調用它所指向的對象上的方法,對于static方法,obj必須為null。

所有需要傳遞給方法的參數都必須在parameters數組中指定。如果方法不需要參數,則paramenters必須為null

基類MethodBase的Invoke()方法返回被調用方法的返回值

請看下面的事例:

MyClass類Set()方法有所改變:

 1  public void Set(int a, int b) 2         { 3             Console.WriteLine("Set(int,int)");  4             x = a; 5             y = b; 6             Show(); 7         } 8         public void Set(double a, double b) 9         {10             Console.WriteLine("Set(double,double)");11             x = (int)a;12             y = (int)b;13             Show();14         }

應用程序代碼!

 1  Type t = typeof(MyClass); 2             MyClass reflectOb = new MyClass(10, 20); 3             int val; 4             Console.WriteLine("Invoke methods in " + t.Name);//調用MyClass類的方法 5             Console.WriteLine(); 6             MethodInfo[] mi = t.GetMethods(); 7  8             foreach (MethodInfo m in mi)//調用每個方法 9             {10                 //獲得方法參數11                 ParameterInfo[] pi = m.GetParameters();12                 if (m.Name.Equals("Set",StringComparison.Ordinal)&&pi[0].ParameterType==typeof(int))13                 {14                     //     指定 System.String.Compare(System.String,System.String) 和 System.String.Equals(System.Object)15                     //     方法的某些重載要使用的區域、大小寫和排序規則。16                     //StringComparison.Ordinal   使用序號排序規則比較字符串 17                     object[] obj = new object[2];18                     obj[0] = 9;19                     obj[1] = 18;20                     m.Invoke(reflectOb, obj);21                 }22                 else if (m.Name.Equals("Set",StringComparison.Ordinal)&&pi[0].ParameterType==typeof(double))23                 {24                     object[] obj = new object[2];25                     obj[0] = 1.12;26                     obj[1] = 23.4;27                     m.Invoke(reflectOb, obj);28                 }29                 else if (m.Name.Equals("Sum",StringComparison.Ordinal))30                 {31                     val = (int)m.Invoke(reflectOb, null);32                     Console.WriteLine("Sum is : " + val);33                 }34                 else if (m.Name.Equals("IsBetween", StringComparison.Ordinal))35                 {36                     object[] obj = new object[1];37                     obj[0] = 14;38                     if ((bool)m.Invoke(reflectOb, obj))39                     {40                         Console.WriteLine("14 is between x and y"); 41                     }42                 }43                 else if (m.Name.Equals("Show",StringComparison.Ordinal))44                 {45                     m.Invoke(reflectOb,null);46                 }47             }
Main

詳細地址 :http://www.mhPRofessional.com/product.php?cat=112&isbn=007174116X&cat=112


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产精品国自产拍av秋霞| 欧美精品www在线观看| 欧美成人免费播放| 另类图片亚洲另类| 欧美视频国产精品| 在线视频中文亚洲| 日韩a**站在线观看| 国产日本欧美一区二区三区| 亚洲激情国产精品| 欧美激情精品久久久久久黑人| 日本中文字幕久久看| 亚洲аv电影天堂网| 欧美午夜女人视频在线| 九九综合九九综合| 91久热免费在线视频| 欧美大尺度在线观看| 上原亚衣av一区二区三区| 91久久精品国产91久久性色| 日韩美女视频免费看| 国产精品91在线观看| 欧美巨乳在线观看| 欧美性xxxx极品高清hd直播| 欧美另类暴力丝袜| 国产精品视频xxx| 在线看片第一页欧美| 国外成人在线播放| 91视频免费网站| 国产精品美女久久久久av超清| 国产精品都在这里| 国产精品日韩在线| 欧美综合在线观看| 国产这里只有精品| 日韩乱码在线视频| 亚洲女在线观看| 亚洲成av人乱码色午夜| 日韩一区二区三区国产| 国产精品午夜国产小视频| 日韩一二三在线视频播| 欧美日韩国产一区在线| 成人午夜激情免费视频| 亚洲最大福利视频| 亚洲福利在线播放| 欧美猛男性生活免费| 狠狠做深爱婷婷久久综合一区| 成人www视频在线观看| 亚洲永久在线观看| 97精品国产91久久久久久| 精品亚洲一区二区| 亚洲福利在线看| 色视频www在线播放国产成人| 欧美精品成人91久久久久久久| 欧美日韩亚洲精品一区二区三区| 日韩av电影手机在线| 欧美成年人视频| 欧美亚洲国产日韩2020| 久久久久久久久久久亚洲| 全亚洲最色的网站在线观看| 最近中文字幕2019免费| 久久久综合免费视频| 欧美精品福利在线| 亚洲国产精品99| 欧美日韩色婷婷| 国产欧美在线播放| 中文字幕在线国产精品| 亚洲一级免费视频| 2019中文字幕在线观看| 欧美日韩在线另类| 久久免费视频在线| 国产成人精品一区| 日本aⅴ大伊香蕉精品视频| 国产成人啪精品视频免费网| 国产精品电影一区| 国产成人精品在线观看| 国产精品一区二区性色av| 国产精品十八以下禁看| 亚洲第一二三四五区| 亚洲精品99久久久久中文字幕| 久久国产视频网站| 羞羞色国产精品| 九九热在线精品视频| 欧美日韩国产麻豆| 国产精品一久久香蕉国产线看观看| 欧美另类极品videosbestfree| 精品国产老师黑色丝袜高跟鞋| 亚洲精品免费一区二区三区| 亚洲无线码在线一区观看| 亚洲一区二区三区成人在线视频精品| 欧美大肥婆大肥bbbbb| 欧美日韩一区二区在线| 精品视频在线播放免| 日韩亚洲一区二区| 亚洲精美色品网站| 日韩av免费在线观看| www.日韩av.com| 亚洲国产成人久久综合一区| 色综合久综合久久综合久鬼88| 国产日韩在线观看av| 欧美自拍大量在线观看| 亚洲最新视频在线| 日韩在线观看免费| 日韩av网址在线| 国产欧美一区二区三区视频| 国产精品88a∨| 狠狠操狠狠色综合网| 亚洲精品成a人在线观看| 不卡在线观看电视剧完整版| 国产精品com| 91久久精品日日躁夜夜躁国产| 在线观看亚洲视频| 另类专区欧美制服同性| 日本国产欧美一区二区三区| 亚洲欧美日韩直播| 26uuu另类亚洲欧美日本老年| 91精品国产综合久久久久久久久| 精品国产一区二区三区久久| 久久精品久久久久| 国产精品日韩av| 国产精品小说在线| 亚洲免费伊人电影在线观看av| 久久综合伊人77777蜜臀| 91国内揄拍国内精品对白| 欧美疯狂做受xxxx高潮| 狠狠久久亚洲欧美专区| 亚洲国产欧美日韩精品| 国产精品免费久久久久影院| 狠狠色香婷婷久久亚洲精品| 久久成人人人人精品欧| 欧美亚洲国产日韩2020| 亚洲免费视频观看| 91免费在线视频网站| 久久99久久亚洲国产| 欧美视频二区36p| 欧美诱惑福利视频| 日本午夜精品理论片a级appf发布| 亚洲成年人在线播放| 欧美老妇交乱视频| 久久精品国产欧美亚洲人人爽| 亚洲综合中文字幕在线观看| 久久久影视精品| 九九视频直播综合网| 色狠狠av一区二区三区香蕉蜜桃| 国产成人综合精品| 中文字幕亚洲欧美一区二区三区| 国产精品99久久99久久久二8| 欧美在线视频一区| 97精品久久久中文字幕免费| 亚洲欧美另类中文字幕| 国产日韩精品在线观看| 国产精品美女www爽爽爽视频| 亚洲二区中文字幕| 亚洲xxx视频| 午夜精品在线视频| 深夜福利国产精品| 欧美一级bbbbb性bbbb喷潮片| 亚洲色图15p| 亚洲韩国欧洲国产日产av| 国产精品成人一区二区| 亚洲欧美制服综合另类| 萌白酱国产一区二区| 日韩欧美主播在线| 午夜欧美大片免费观看| 俺也去精品视频在线观看| 久久免费视频在线| 欧美午夜片在线免费观看|