熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

學習反射中的動態創建對象

2022-06-13   來源: .NET編程 

  Assembly的CreateInstance有三個重載第一個參數需要是一個字符串表示的完整的類名第二個參數是一個bool類型如果為true表示對第一個參數不區分大小寫

  第三個 影響執行搜索的方式的位屏蔽此值是 SystemReflectionBindingFlags 中的位標志的組合

  

  //   binder:   一個啟用綁定參數類型強制成員調用以及通過反射進行 MemberInfo 對象檢索的對象

  如果 binder 為 null則使用默認聯編程序

  //   args:  Object 類型的數組包含要傳遞給構造函數的參數此參數數組在數量順序和類型方面必須

  與要調用的構造函數的參數匹配如果需要默認的構造函數則 args 必須是空數組或 null

  //   culture:   用於控制類型強制的 CultureInfo 的實例如果這是 null則使用當前線程的 CultureInfo(例如這對於將表示    的 String 轉換為

  Double 值是必需的因為不同的區域性以不同的方式表示

  //   activationAttributes:    包含一個或多個可以參與激活的屬性的數組通常為包含單個 SystemRuntimeRemotingActivationUrlAttribute 對象的數組

  SystemRuntimeRemotingActivationUrlAttribute 指定激活遠程對象所需的 URL有關客戶端激活的對象的詳細說明請參見客戶端激活

  Activator類的靜態方法CreateInstance

  CreateInstance的第一個參數說明是程序集的名稱為null時表示當前程序集第二個參數說明要創建的類型名稱ActivatorCreateInstance返回的是一個ObjectHandle對象必須進行一次Unwrap()才能返回Object類型進而可以強制轉換成我們需要的類型(本例中是MathClass)ObjectHandle包含在SystemRuntimeRemoting命名空間中可見它是Remoting相關的實際上ObjectHandle類只是一個對原類型進行了一個包裝以便進行封送

  無參構造

  有參構造

  動態調用

  使用InvokeMember調用方法

  InvokeMember(方法名 BindingFlagsInvokeMethod null對象實例方法參數);

  靜態InvokeMember(方法名 BindingFlagsInvokeMethod null類型Type方法參數);

  MethodInfoInvoke調用方法

  MethodInfo mi = tGetMethod(方法名 BindingFlagsInstance | BindingFlagsPublic);

  miInvoke(對象實例 null);

  靜態

  MethodInfo mi = tGetMethod(方法名 BindingFlagsStatic | BindingFlagsPublic);

  MiInvoke(null 方法參數 );

  用反射可以達到最大程度上的多態


From:http://tw.wingwit.com/Article/program/net/201311/11935.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.