最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C#_反射與特性

2022-02-11 11:27 作者:Pan_ana  | 我要投稿
  • 程序集

  1. 經(jīng)過編譯器編譯得到的產(chǎn)物(.exe/.dll)

  2. 是自己寫的代碼集合

  • 元數(shù)據(jù)

  1. 用來描述程序集的數(shù)據(jù)單元

  • 反射

  1. 可以在程序運行時,可以查看其他程序集或者自身的元數(shù)據(jù)

  2. 提高了程序的拓展性和靈活性

  3. using System.Reflection命名空間下

  4. using System

  1. Type【類的信息類】

  2. Assembly【程序集類

  3. Activator【實例化對象的類】

  1. .GetType();//在xx命名空間下的.xx

  2. Type t=typeof(int);//在xx命名空間下的xx

  3. Type.GetType();//【參數(shù)】System.Int32(需要包含命名空間)

以上的三種方法指向的是同一個引用內(nèi)存地址

  1. 得到所有的公共成員】:MemberInfo[] m=t.GetMembers();

  1. 得到所有的構(gòu)造方法】:ConstructorInfo[] info=t.GetConstructors();

    得到一個的構(gòu)造方法】:ConstructorInfo info=t.GetConstructor(new Type[0]);【參數(shù)】有長度的Type類型數(shù)組,長度0則為無參構(gòu)造。?info.Invoke();//【參數(shù):null】執(zhí)行得到的構(gòu)造方法,返回object對象(需要as得到引用對象)

    得到有參的構(gòu)造方法】:ConstructorInfo info=t.GetConstructor(new Type[]{typeof(int)}); //一個int類型的構(gòu)造方法;info.Invoke(new Type[]{2});?//【參數(shù)】傳入2返回object對象(需要as得到引用對象){同理:兩個參數(shù)的構(gòu)造函數(shù)時,需要按照順序typeof(int),typeof(string)}

  2. 得到所有的成員變量】:FieldInfo[] f=t.GetFields();

    得到一個成員變量】:FieldInfo?f=t.GetField("age");//【參數(shù)】變量名得到引用

    得到成員變量的內(nèi)容】:f.GetValue(obj);//【參數(shù)】為該變量類型的實例

    【設(shè)置成員變量的內(nèi)容】:f.SetValue(obj,10);//【參數(shù)】1.實例2.更改obj的值,若[枚舉則為.GetValue(null),先得成員后訪問]

  3. 得到公共的成員方法】:Method[] f=t.GetMethods();//得到對應(yīng)有參數(shù)的成員方法和構(gòu)造方法的方式一致

    得到一個成員方法】:Method?f=t.GetMethod("FunName");//【參數(shù)】方法名得到引用,f.Invoke(類型實例(如果為靜態(tài)方法為null),new Type[]{10,10});

  4. 【枚舉、事件、接口】

  1. Activator實例化

    1. 得到Type t=typeof(MyClass);

    2. Activator.CreateInstance(t);//【參數(shù)】為對象信息類,返回object對象(需要as)默認為無參構(gòu)造

    3. Activator.CreateInstance(t,2,“222”);//【參數(shù)】為對象信息類,返回object對象(需要as)默認為無參構(gòu)造,后面為對應(yīng)參數(shù),不對應(yīng)則報錯

  2. Assembly【程序集類

    1. Assembly asem= Assembly.Load();//同個工程文件下程序集名稱

    2. Assembly asem= Assembly.LoadFrom();//加載指定路徑下的.dll【使用@取消轉(zhuǎn)移字符或者\\】用Type[]進行裝置遍歷

    3. Assembly asem= Assembly.LoadFile();

  • 特性


  1. What

    1. 是一種允許我們向程序的程序集添加一些元數(shù)據(jù)的語言結(jié)構(gòu),用于保存程序結(jié)構(gòu)信息的某種特殊類型的類

    2. 提供了強大的方法聲明信息與代碼的其他元數(shù)據(jù)相關(guān)聯(lián),可以在運行時使用反射來查詢特性的相關(guān)信息描述

    3. 目的是提供編譯器把某些元數(shù)據(jù)進行特殊處理,本質(zhì)是一個類

  2. Why

    1. 提供某些特殊需求

  3. How

    1. 定義】該類需要繼承Attribute才能自定義特性名字后面需亞添加Attribute表示是特性,在使用時Attribute會被省略

    2. 調(diào)用

      1. [MyTest("特性測試")],判斷Type對象有沒有有沒有對應(yīng)的特性,t.IsDefined(typeof(自定義的特性類名),bool是否搜索繼承鏈)//可以傳成員等

      2. t.GetCustomAttribues(ture)//獲取元數(shù)據(jù)中的所有特性 返回object對象數(shù)組可以遍歷去判斷做特殊處理(as 為對應(yīng)的類進行調(diào)用對應(yīng)的成員)

    3. 限定使用范圍】為特性類再加[AttributeUsage()][參數(shù)]1.可以使用在哪里可以用位運算符進行處理2.是否多個特性實例用在同一個目標上3.特性是否能被派生類重寫和繼承

    4. 過時特性】[obsolete("該方法已經(jīng)過時,請使用GetAaxis方法",bool調(diào)用是否會報錯)]

    5. 調(diào)用者信息特性】一般用在處理異常的Try中,System.Runtime.CompilerServices;

    6. 條件編譯特性】[Conditional("Fun")]System.Diagnostic,結(jié)合#define Fun進行使用,主要用在調(diào)試代碼

    7. 外部Dll包特性】System.Runtime.InteropServices;//調(diào)用C/C++寫好的函數(shù),[DllImport(“路徑.dll”)]

      public static extern int Add(int a,int b);//進行函數(shù)映射


C#_反射與特性的評論 (共 條)

分享到微博請遵守國家法律
乌海市| 唐山市| 保靖县| 明星| 突泉县| 安顺市| 开远市| 泸水县| 菏泽市| 独山县| 朝阳市| 托克逊县| 龙井市| 太白县| 惠水县| 禹州市| 临江市| 丹凤县| 光山县| 汾阳市| 安西县| 泸溪县| 河津市| 南江县| 电白县| 昌图县| 涟水县| 巴青县| 衢州市| 班戈县| 建湖县| 永寿县| 呼玛县| 广元市| 柏乡县| 蓬莱市| 仁怀市| 沧州市| 厦门市| 商水县| 大关县|