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

首頁 > 編程 > C# > 正文

C#泛型和反射實例解析

2020-01-24 02:34:15
字體:
來源:轉載
供稿:網友

C#中的泛型和反射經常是一起工作的,因此這里就一次性的加以介紹了。

由于c#是強類型語言,一般來說函數的返回類型和參數的類型都是一早寫好的,這也就造成了很多時候不像js那樣方便使用,不夠靈話。

因此就有了這個泛型,它可以讓你的函數和參數在調用的時候才決定類型。如下例所示:

public T abc<T>(T word){return word;return default(T); //關鍵字default可以對引用類型返回nullAble,int類型返回0,初始化一個T的感覺啦}abc<string>("x");//struct 是 值類型 //好處調用的是如果參數是值類型可以不用著名 test(100) 而不需要 test<int>(100);public void test<T>(T number) where T : struct{int z = Convert.ToInt32(number);//調用 test(100);}//下面的不知道好處在哪用在什么地方,public void test2<T>(T lei) where T : class{} public void test3<T>() where T : stooges{} public T test4<T>() where T : new(){T abc = new T();return abc;}public class stooges{   }

加了where 我就不清楚在什么地方用的上了,這個以后再研究

反射能讓我們的代碼運行時動態的獲取一些對象或者類的屬性值等等,甚至是調用它們

先來一個常用到的,我們想獲取一個對象的全部屬性和值, 用js 是:

for(var attr in object) { object[attr]=value, attr = attr } var obj = new abc();Type T = typeof(abc); //typeof(Class) 而不是 typeof(object) 哦Type V = obj.GetType(); //obj.GetType() 就是typeof(object的class)PropertyInfo[] attrs = obj.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); //獲取attrsforeach (PropertyInfo attr in attrs) {string key = attr.Name; //獲取attr nameobject value = attr.GetValue(obj, null); //獲取value  Type type = attr.PropertyType; //類型    }

關鍵就是那個 Type , 獲取Type后就可以做很多了

C#常用的方法為:

T.GetProperty("key").GetValue(obj, null); //read a key valueT.GetProperty("key").SetValue(obj, "", null); //write a value to key//注意如果是字典 T.GetProperty("Item").GetValue(obj, new [] {"id"}); //先拿Item 然后才通過 new[] {這里放指定的key}

再來看看更詳細的

class MyClass{public int x { get; set; }public int y { get; set; }public MyClass(int i){  x = y + i;}public MyClass(int i, int j){  x = i;  y = j;}public int sum(){  return x + y;}}

我們想獲取這個Class 的構造函數 :

Type t = typeof(MyClass);     ConstructorInfo[] constructors = t.GetConstructors(); //使用這個方法獲取構造函數列表    for (int i = 0; i < constructors.Length; i++){ConstructorInfo constructor = constructors[i];//構造函數也是方法所以有 GetParametersParameterInfo[] parameters = constructor.GetParameters(); //獲取當前構造函數的參數列表string paraTypeName = parameters[0].ParameterType.Name; //方法的參數類型名稱string paraName = parameters[0].Name;// 方法的參數名         }     //調用構造函數object[] args = new object[2];args[0] = 10;args[1] = 20;//不用new 直接實例化object instance = constructors[0].Invoke(args); //實例化一個這個構造函數有兩個參數的類型對象,如果參數為空,則為nullobject instance = (t)Activator.CreateInstance(t); 還有這種實例的方法,不清楚可以放參數沒有

調用方法如下:

MethodInfo[] methods = T.GetMethods(BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Instance);foreach (MethodInfo method in methods){string return_name = method.ReturnType.Name; //返回方法的返回類型string name = method.Name;if (name.Equals("sum", StringComparison.Ordinal)) //指定方法名調用{  int value = (int)method.Invoke(instance, null); //instance是之前實例好的對象,方法就是在這個對象之中}}

下面是一些參考代碼:

Type t = typeof(MyClass);Console.WriteLine("----------------Method------------------");MethodInfo[] methods = t.GetMethods();foreach (MethodInfo method in methods){  Console.WriteLine("Method:" + method);  //Console.WriteLine(method);   //Console.WriteLine("返回值:" + method.ReturnParameter); }Console.WriteLine("---------------Field-------------------"); //字段 ,比如這種 private static string name; FieldInfo[] fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);foreach (FieldInfo field in fields){  Console.WriteLine("Field:" + field);}Console.WriteLine("--------------Member--------------------"); //成員即方法和屬性MemberInfo[] members = t.GetMembers();foreach (MemberInfo member in members){  Console.WriteLine("Member:" + member);}Console.WriteLine("--------------Property--------------------"); //屬性PropertyInfo[] properties = t.GetProperties();foreach (PropertyInfo property in properties){  Console.WriteLine("Property:" + property);}Console.WriteLine("--------------Constructor--------------------"); //構造函數ConstructorInfo[] constructors = t.GetConstructors(BindingFlags.NonPublic | BindingFlags.Instance);foreach (ConstructorInfo constructor in constructors){  Console.WriteLine("Constructor:" + constructor);}

調用不用記太清楚,關鍵知道什么東西可以用反射獲取和調用就可以了。

比較常使用的地方是用泛型寫方法的時候,比如我們的泛型是一個不確定的類,然后我們要獲取attr值等等的,就很好可以使用反射了。

還有通過string來調用方法,這個在js很長用到,比如 obj["methodName"](); 這里也可以用到反射來實現。

此外還需要注意: 反射的性能是很慢的,也可以說動態就是慢,這個是很正常的,反射的性能優化可以參考使用動態編程之類的,不過這里就不提了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
青青草国产精品一区二区| 久久偷看各类女兵18女厕嘘嘘| 欧美成人在线免费| 日本91av在线播放| 亚洲色图美腿丝袜| 欧美三级免费观看| 美日韩丰满少妇在线观看| 日韩a**站在线观看| 欧美极品少妇xxxxⅹ喷水| 日韩在线视频国产| 最近2019中文字幕mv免费看| 欧美中文在线字幕| 日韩在线观看免费高清完整版| 91丝袜美腿美女视频网站| 国产欧美日韩最新| 欧美成人一区二区三区电影| 亚洲码在线观看| 96精品久久久久中文字幕| 亚洲免费av网址| 北条麻妃一区二区三区中文字幕| 亚洲网站在线看| 欧美国产第一页| 欧美最猛性xxxx| 亚洲美女动态图120秒| 亚洲va久久久噜噜噜| 久久色免费在线视频| 亚洲综合在线播放| 这里只有精品视频| 国产噜噜噜噜久久久久久久久| 在线视频亚洲欧美| 亚洲区一区二区| 亚洲欧美国产精品久久久久久久| 一区二区三区视频免费在线观看| 岛国av一区二区三区| www.99久久热国产日韩欧美.com| 亚洲女人天堂色在线7777| 69av成年福利视频| 大量国产精品视频| 亚洲欧美日韩视频一区| 亚洲图片制服诱惑| 欧美高清在线视频观看不卡| 国产成人精品优优av| 日韩麻豆第一页| 亚洲精品91美女久久久久久久| 九色精品免费永久在线| 精品国产31久久久久久| 亚洲精品国精品久久99热| 97视频色精品| 亚洲一区999| www.日韩不卡电影av| 亚洲国产另类 国产精品国产免费| 51色欧美片视频在线观看| 亚洲一区二区自拍| 亚洲丝袜在线视频| 国内精品美女av在线播放| 亚洲娇小xxxx欧美娇小| 精品国产一区二区三区久久狼黑人| 在线观看国产精品91| 爽爽爽爽爽爽爽成人免费观看| 国产精品视频自拍| 日韩在线欧美在线国产在线| 国产精品久久久久久久久久新婚| 午夜精品一区二区三区在线| 亚洲欧洲在线免费| 伊人久久精品视频| 亚洲一区二区中文| 2019精品视频| 日韩欧美视频一区二区三区| 久久久欧美精品| 欧美日韩不卡合集视频| 久久6精品影院| 久久久999精品视频| 亚洲最新视频在线| 亚洲欧美日韩视频一区| 欧美日韩国产二区| 性欧美视频videos6一9| 亚洲a级在线观看| 中文字幕欧美日韩| 久久天天躁夜夜躁狠狠躁2022| 久久久久久久影视| 91色在线观看| 久久综合电影一区| 欧美日韩在线观看视频| 国产精品com| 欧美日韩一区二区在线| 精品久久久久久久大神国产| 亚洲第一中文字幕在线观看| 欧美日韩国产第一页| 欧美尤物巨大精品爽| 尤物九九久久国产精品的特点| 日韩一区二区三区xxxx| 欧美高清视频免费观看| 国产日产久久高清欧美一区| 欧美日韩国产精品一区二区三区四区| 日韩精品中文在线观看| 欧美亚洲国产另类| 色婷婷av一区二区三区久久| 69久久夜色精品国产7777| 成人精品aaaa网站| 国产日韩欧美综合| 久久久99免费视频| 91久久精品国产91久久| 亚洲人线精品午夜| 亚洲成av人片在线观看香蕉| 九九精品视频在线| 亚洲激情 国产| 国产91精品高潮白浆喷水| xxxxx成人.com| 欧美理论电影网| 亚洲最新av在线网站| 1769国产精品| 亚洲日本aⅴ片在线观看香蕉| 欧美视频不卡中文| 国产精品久久久久久久久久久久| 这里只有精品视频| 日韩美女毛茸茸| 久久91超碰青草是什么| 91亚洲午夜在线| 韩国三级日本三级少妇99| 国产免费一区二区三区香蕉精| 一区二区欧美日韩视频| 国产精品99久久久久久久久| 久久久精品免费视频| 美女视频黄免费的亚洲男人天堂| 亚洲视频在线观看视频| 性色av一区二区咪爱| 欧美日韩国产中文精品字幕自在自线| 国产原创欧美精品| 久久精品免费电影| 久久国产精品亚洲| 久久久久久久影院| 久久久国产精品亚洲一区| 日韩黄色高清视频| 精品视频偷偷看在线观看| 亚洲免费伊人电影在线观看av| 亚洲精品v欧美精品v日韩精品| 国产成人精品久久亚洲高清不卡| 日韩中文字幕在线视频| 国产精品亚洲视频在线观看| 日韩最新av在线| 亚洲福利在线视频| 97人人爽人人喊人人模波多| 91影视免费在线观看| 成人妇女淫片aaaa视频| 久久久久久久一区二区三区| 国产精品7m视频| 欧洲亚洲女同hd| 91免费国产视频| 亚洲色图日韩av| 国内偷自视频区视频综合| 国模私拍视频一区| 成人国产精品日本在线| 亚洲成色777777女色窝| 亚洲男人天堂网| 国产丝袜一区视频在线观看| www.欧美免费| 国产精品老女人精品视频| 欧美成人精品激情在线观看| 成人精品一区二区三区| 2019中文在线观看| 国产91精品青草社区| 中文字幕视频一区二区在线有码| 日韩中文在线不卡| 少妇高潮久久久久久潘金莲|