解讀.Net基礎(chǔ):學(xué)習(xí)反射中的動(dòng)態(tài)創(chuàng)建對(duì)象_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:談如何使用 Lambda 表達(dá)式做抽象代表
      Lambda表達(dá)比代表定義和帶外方法定義的結(jié)合更清楚,且相關(guān)的額外工作只需要滿足語(yǔ)言定義即可。不過,它也有一些不足之處。如果某個(gè)方法的參數(shù)包含System.Delegate 這樣的抽象類型,用lambda表達(dá)式介紹特殊的問題:C#編譯器不能將lambda表達(dá)式轉(zhuǎn)換成還未明確

      Assembly的CreateInstance有三個(gè)重載。

      第一個(gè)參數(shù)需要是一個(gè)字符串表示的完整的類名。

      第二個(gè)參數(shù)是一個(gè)bool類型,如果為true,表示對(duì)第一個(gè)參數(shù)不區(qū)分大小寫。

      第三個(gè)影響執(zhí)行搜索的方式的位屏蔽。此值是 System.Reflection.BindingFlags 中的位標(biāo)志的組合。

      // binder: 一個(gè)啟用綁定、參數(shù)類型強(qiáng)制、成員調(diào)用以及通過反射進(jìn)行 MemberInfo 對(duì)象檢索的對(duì)象。如果 binder 為 null,則使用默認(rèn)聯(lián)編程序。// args: Object 類型的數(shù)組,包含要傳遞給構(gòu)造函數(shù)的參數(shù)。此參數(shù)數(shù)組在數(shù)量、順序和類型方面必須與要調(diào)用的構(gòu)造函數(shù)的參數(shù)匹配。如果需要默認(rèn)的構(gòu)造函數(shù),則 args 必須是空數(shù)組或 null。

      // culture: 用于控制類型強(qiáng)制的 CultureInfo 的實(shí)例。如果這是 null,則使用當(dāng)前線程的 CultureInfo。(例如,這對(duì)于將表示 1000 的 String 轉(zhuǎn)換為

      Double 值是必需的,因?yàn)椴煌膮^(qū)域性以不同的方式表示 1000。

      // activationAttributes: 包含一個(gè)或多個(gè)可以參與激活的屬性的數(shù)組。通常為包含單個(gè) System.Runtime.Remoting.Activation.UrlAttribute 對(duì)象的數(shù)組。

      System.Runtime.Remoting.Activation.UrlAttribute 指定激活遠(yuǎn)程對(duì)象所需的 URL。有關(guān)客戶端激活的對(duì)象的詳細(xì)說明,請(qǐng)參見客戶端激活。

      Activator類的靜態(tài)方法CreateInstance。

      CreateInstance的第一個(gè)參數(shù)說明是程序集的名稱,為null時(shí)表示當(dāng)前程序集;第二個(gè)參數(shù)說明要?jiǎng)?chuàng)建的類型名稱。Activator.CreateInstance返回的是一個(gè)ObjectHandle對(duì)象,必須進(jìn)行一次Unwrap()才能返回Object類型,進(jìn)而可以強(qiáng)制轉(zhuǎn)換成我們需要的類型(本例中是MathClass)。ObjectHandle包含在System.Runtime.Remoting命名空間中,可見它是Remoting相關(guān)的,實(shí)際上ObjectHandle類只是一個(gè)對(duì)原類型進(jìn)行了一個(gè)包裝以便進(jìn)行封送。

      無參構(gòu)造:

      有參構(gòu)造:

      動(dòng)態(tài)調(diào)用 :

      .使用InvokeMember調(diào)用方法

      InvokeMember("方法名", BindingFlags.InvokeMethod, null,對(duì)象實(shí)例,方法參數(shù));
      靜態(tài):InvokeMember("方法名", BindingFlags.InvokeMethod, null,.類型Type.,方法參數(shù));
      .MethodInfo.Invoke調(diào)用方法
      MethodInfo mi = t.GetMethod("方法名"", BindingFlags.Instance | BindingFlags.Public);
      mi.Invoke(對(duì)象實(shí)例, null);
      靜態(tài)
      MethodInfo mi1 = t.GetMethod("方法名"", BindingFlags.Static | BindingFlags.Public);
      Mi1.Invoke(null, 方法參數(shù) );
      用反射可以達(dá)到最大程度上的多態(tài)

       

      分享:淺析C# 2010命名和可選參數(shù)的新特性
      1.命名參數(shù)允許調(diào)用者通過提供參數(shù)的名稱來為其賦值,這樣參數(shù)的位置就不在重要了。可選參數(shù)允許在定義時(shí)為某些參數(shù)賦值,在調(diào)用時(shí)可以忽略這些

      來源:模板無憂//所屬分類:.Net教程/更新時(shí)間:2009-08-30
      相關(guān).Net教程