精品视频123区在线观看_少妇按摩一区二区三区_91亚洲精选_91老司机在线_久久大综合网_97超碰在线资源_亚洲午夜久久久久久久久电影院_日韩欧美一区二区三区视频

二維碼
企資網

掃一掃關注

當前位置: 首頁 » 企資快訊 » 匯總 » 正文

C也自學——反是(Reflection)

放大字體  縮小字體 發布日期:2023-05-04 03:05:21    作者:江炫煌    瀏覽次數:160
導讀

反射是很多框架都用到得東西,是從0.25到0.5得一個進階反射專業動態創建對象,動態賦值,動態調用方法反射專業在運行時獲的類得信息每個類都有一個 type對象,構造方法對應得是 ConstructorInfo對象,方法對應得是 M

反射是很多框架都用到得東西,是從0.25到0.5得一個進階

反射專業動態創建對象,動態賦值,動態調用方法

反射專業在運行時獲的類得信息

每個類都有一個 type對象,構造方法對應得是 ConstructorInfo對象,方法對應得是 MethodInfo對象,字段對應得是 FieldInfo對象,屬性對應得是 PropertyInfo對象,使用時需要引用using System.Reflection;

Type

class Dog:Animal{ public string name; public int age; double price; static double weight; public Dog() { } public Dog(string name) { } public Dog(string name,int age) { } public override void Say() { } public double Price { get; set; } public double Weight { get; set; }}class Animal{ public virtual void Say() { }}class Print{ static void Main() { Dog dog = new Dog(); // 獲取類得 type 對象常用得三種方式 Type type = typeof(Dog); Type type1 = dog.GetType(); Type type2 = Type.GetType("Application.Dog"); //假設只知道類得名字,利用類名創建對象實例 Type t = typeof(Dog); // Activator.CreateInstance(t); 被實例化得對象必須有無參構造方法,沒有則會拋出 MissingMethodException 缺失方法異常 object dog1 = Activator.CreateInstance(t); // 相當于 new Dog();,由于返回得是 object ,所以只能用 object 接收 Console.WriteLine(dog1); Console.WriteLine(t.baseType); // 獲取父類 Console.WriteLine(t.Name); // 獲取類名 Console.WriteLine(t.FullName); // 獲取全名,包含命名空間 Console.WriteLine(t.IsAbstract); // 判斷是否為 抽象類 Console.WriteLine(t.IsArray); // 是否為 數組 Console.WriteLine(t.IsClass); // 是否為 普通類 Console.WriteLine(t.IsEnum); // 是否為 枚舉 Console.WriteLine(t.IsPublic); // 是否為 public Console.WriteLine(t.IsValueType); // 是否為 值類型 Console.WriteLine("------------gov 構造方法 gov---------------"); // 獲取無參構造方法 t.GetConstructor(new Type[0]); 參數要求是 type對象數組,因此無參構造就只需要入參長度為 0 得數組就好了 ConstructorInfo c1 = t.GetConstructor(new Type[0]); Console.WriteLine(c1); // Void .ctor ctor是IL里面構造方法得表現方式 // 獲取參數類型為 string 得構造方法 c1 = t.GetConstructor(new Type[] { typeof(string) }); Console.WriteLine(c1); // 獲取參數類型為 string,int 得構造方法 c1 = t.GetConstructor(new Type[] { typeof(string), typeof(int) }); Console.WriteLine(c1); Console.WriteLine("------------gov 字段 gov---------------"); // 獲取所有字段,必須是public,獲取得是未封裝得字段 FieldInfo[] f1 = t.GetFields(); foreach (var field in f1) { Console.WriteLine(field); } // 獲取 非public,且 非static 得字段,如果需要獲取 static得,把Instance改成static f1 = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance); foreach (var field in f1) { Console.WriteLine(field); } Console.WriteLine("------------gov 方法 gov---------------"); // 獲的所有方法 MethodInfo[] m1 = t.GetMethods(); foreach (var method in m1) { Console.WriteLine(method); } // 獲的指定方法 // 注:如果方法有重載,則拋出 AmbiguousMatchException MethodInfo m2 = t.GetMethod("Say"); Console.WriteLine("\n"+m2); // 解決方法拋出 AmbiguousMatchException異常 m2 = t.GetMethod("Say",new Type[0]); // 獲取無參方法 m2 = t.GetMethod("Say",new Type[] { typeof(string)}); // 獲取參數為 string 得方法 Console.WriteLine("------------gov 屬性 gov---------------"); // 獲的屬性,獲取到得是封裝過得屬性 PropertyInfo[] prop = t.GetProperties(); foreach (var p in prop) { Console.WriteLine(p); }}}

輸出:

Application.DogApplication.AnimalDogApplication.DogFalseFalseTrueFalseFalseFalse------------gov 構造方法gov---------------Void.ctor()Void .ctor(System.String)Void .ctor(System.String, Int32)------------gov 字段gov---------------System.String nameSystem.Int32 ageSystem.Double priceSystem.Double<Price> k__BackingFieldSystem.Double<Weight> k__BackingField------------gov 方法gov---------------Void Say()Double get_Price()Void set_Price(Double)Double get_Weight()Void set_Weight(Double)Boolean Equals(System.Object)Int32 GetHashCode()System.Type GetType()System.String ToString()Void Say()------------gov 屬性gov---------------Double PriceDouble Weight反射示例 1

class Dog{ public string name; public void Say() { Console.WriteLine("你好,"+Name); } public void Say(string name) { Console.WriteLine(#34;你好,{name}"); } public string Name { get; set; }}class Print{ // 反射示例 static void Main() { // 創建對象 Type t = typeof(Dog); object obj = Activator.CreateInstance(t); // 創建對象,調用無參構造(方法1) object obj1 = t.GetConstructor(new Type[0]).Invoke(new object[0]); // 獲的對象得無參構造,調用(方法2) // 給屬性賦值 PropertyInfo prop = t.GetProperty("Name"); // 獲的屬性 prop.SetValue(obj, "大寶"); // 賦值 // 調用方法 MethodInfo method = t.GetMethod("Say", new Type[0]); // 獲的無參方法 MethodInfo method1 = t.GetMethod("Say", new Type[] { typeof(string) }); // 獲的有參方法 method.Invoke(obj, new object[0]); // 調用無參方法 method1.Invoke(obj, new object[] { "Tom" }); // 調用有參方法并賦值 }}

輸出:

你好,大寶你好,Tom反射示例 2

class Dog{ public string name; public void Say() { Console.WriteLine("你好,"+Name); } public void Say(string name) { Console.WriteLine(#34;你好,{name}"); } public string Name { get; set; }}class Print{ static void Main() { Dog dog = new Dog(); dog.Name = "Tom"; Show(dog); } static void Show(object obj) { Type t = obj.GetType(); PropertyInfo[] prop = t.GetProperties(); foreach (var p in prop) { if (p.CanRead) { string name = p.Name; object value = p.GetValue(obj); Console.WriteLine(name+"="+value); } } }}

輸出:

Name=Tom反射示例3 (復制對象得值)(淺拷貝--僅復制對象得值,不是同一個對象)

class Dog{ public string name; public string Name { get; set; }}class Print{ static void Main() { Dog dog = new Dog(); dog.Name = "Tom"; object dog1 = Clone(dog); Console.WriteLine(object.ReferenceEquals(dog,dog1)); // 判斷是否為同一個對象 } static object Clone(object obj) { Type t = obj.GetType(); object newObject = Activator.CreateInstance(t); // 創建對象 PropertyInfo[] prop = t.GetProperties(); foreach (var p in prop) { if (p.CanRead&&p.CanWrite) { object value = p.GetValue(obj); p.SetValue(newObject, value); } } return newObject; }}

輸出:

False

 
(文/江炫煌)
免責聲明
本文僅代表作發布者:江炫煌個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

粵ICP備16078936號

微信

關注
微信

微信二維碼

WAP二維碼

反饋

用戶
反饋

欧美精品视频www在线观看| 久久久99999| 成人在线一级片| 日本高清一二三区| 伊人久久久久久久久久| 国产亚洲激情在线| 国产成人精品一区二区在线| 91日韩在线播放| 91原创国产| 97久久国产亚洲精品超碰热| 污污的网站18| 亚洲av片不卡无码久久| 国产午夜精品无码| 狠狠躁日日躁夜夜躁av| 欧美性free免费| 欧美r片在线| 蜜臀av在线| 高清电影一区| 欧美少妇性xxxx| 天堂资源在线| 婷婷激情久久| 欧美美女黄色| 国内精品美女在线观看| 不卡的看片网站| 亚洲一区免费观看| 亚洲无限av看| 国产精品欧美激情| 日韩欧美在线一区二区| 免费看三级黄色片| 日韩精品国产一区二区| www.com在线观看| 天天干天天骑| 成人性生交大片免费看在线播放| 欧美理伦片在线播放| 青青草国产成人av片免费| 国产精品天美传媒沈樵| 欧美精品自拍偷拍动漫精品| 欧美猛男性生活免费| 国产视频一区二区三区四区| 黄色aaa级片| 日韩欧美亚洲国产| 天天色综合久久| 中文字幕不卡| 小明成人免费视频一区| 激情国产一区| 亚洲综合在线视频| 日韩中文在线不卡| 亚洲成人自拍视频| 黄色正能量网站| 欧美激情精品久久久久久蜜臀| 91国自产精品中文字幕亚洲| 亚洲激情一区二区三区| 国产一级免费片| 婷婷在线免费观看| 日本午夜在线| 99久久免费精品国产72精品九九| 捆绑紧缚一区二区三区视频 | 小毛片在线观看| 亚洲精品一区二区二区| 99热免费观看| 日本少妇精品亚洲第一区| 免费成人美女在线观看| 欧美丝袜一区二区三区| 国产成人一区二区在线| 91传媒久久久| 日本免费福利视频| √天堂中文www官网| 国产高清视频免费最新在线| 欧美高清视频在线观看mv| 国产精品久久毛片a| 中文字幕欧美日韩| 亚洲国产一二三精品无码 | 国产剧情日韩欧美| 午夜免费福利网站| 精品人妻一区二区三区蜜桃 | 亚洲美女15p| 国产视频一区在线观看| 中文字幕久精品免费视频| 久热这里只精品99re8久| 樱花草www在线| 国产尤物在线观看| av男人的天堂网| 亚洲国产精华液| 中文字幕一区图| 91网站在线观看视频| 亚洲性生活视频| 在线看成人av电影| 日本免费观看视| 激情视频网址| 99久久精品国产亚洲精品| 亚洲一区二区美女| 91精品久久久久久久| 久久福利小视频| 夜夜骑夜夜操| 哺乳挤奶一区二区三区免费看| 久久久久久久综合| 久久99热精品这里久久精品| 日韩免费毛片视频| www.国产视频| 亚洲精品88| 播五月开心婷婷综合| 久精品免费视频| 日韩av加勒比| 国产精品伦一区二区三区视频| 91在线电影| 欧美wwwww| 欧美日韩一区二区在线视频| 蜜桃精品久久久久久久免费影院 | 777.av| 欧美三级午夜理伦三级小说| 精品成人免费自拍视频| 日韩女优毛片在线| 国产精品美女久久久久久不卡 | 国产精品99久久免费观看| 欧美日韩免费在线| 被弄出白浆喷水了视频| 日韩高清dvd| 91性感美女视频| 色网视频在线| 精品国产一区二区三区在线观看| 国产丝袜控视频在线观看| 97免费高清电视剧观看| 免费在线观看视频一区| 狠狠色噜噜狠狠狠狠8888| 99精品一级欧美片免费播放| 人人人妻人人澡人人爽欧美一区| 青青视频一区二区| 国产精品久免费的黄网站| 欧美在线视频导航| 亚洲视频中文| 色爱综合网站| 中文字幕丰满孑伦无码专区| 精品久久久久久综合日本欧美| 亚洲国产aⅴ精品一区二区| 久草视频在线免费| 懂色一区二区三区av片| 国产精品九色蝌蚪自拍| 1769在线观看| 免费三级在线观看| 欧美一区二区三区啪啪| 综合日韩在线| 成人18网站| 亚洲av成人精品一区二区三区| 亚洲色图日韩av| 日本在线不卡一区| 国产中文在线视频| 日韩女优在线观看| 亚洲日本无吗高清不卡| 一本色道久久88精品综合| 色棕色天天综合网| 天天干 夜夜操| 最新黄色av网址| 国产精品一国产精品最新章节| 亚洲成人av在线电影| 色老板在线视频一区二区| 福利视频导航大全| 精品无人区无码乱码毛片国产| 国产乱人伦真实精品视频| 亚洲国产成人私人影院tom| 日韩区欧美区| 色视频www在线播放| 久久永久免费视频| 日本精品免费在线观看| 色av中文字幕一区| 久久久久成人精品无码中文字幕| 免费成人美女在线观看| 国产色在线观看| 亚洲一区中文字幕永久在线| 欧美gay男男猛男无套| 国产精品一区牛牛影视| 18禁裸乳无遮挡啪啪无码免费| 性欧美.com| 日韩欧美国产不卡| 国产一区二区三区在线观看精品 | 99精品视频免费观看视频| 黄色激情网站| 色老头一区二区| 男人天堂999| 国产精品成人观看视频国产奇米| 欧美色区777第一页| 久久久久久亚洲精品美女| 九九热精品在线视频| 一二三四在线观看视频| 一级性生活视频| 最好看更新中文字幕| 国产偷人视频免费| 国产精品视频久| 国产伦精品免费视频| 日韩hd视频在线观看| 中文字幕在线观看一区| 欧美激情日韩| 亚洲国产三级| 久久亚州av| 黄色污污视频在线观看| 伊人影院在线播放| 国产精品久久精品牛牛影视| 999精品视频在线观看播放| 日本十八禁视频无遮挡| 91精品国自产在线观看| 欧美国产日韩一区二区|