最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#動態(tài)加載dll擴展系統(tǒng)功能的方法

 更新時間:2015年04月27日 15:04:21   作者:依山帶水  
這篇文章主要介紹了C#動態(tài)加載dll擴展系統(tǒng)功能的方法,涉及C#動態(tài)加載dll擴展的相關(guān)技巧,需要的朋友可以參考下

本文實例講述了C#動態(tài)加載dll擴展系統(tǒng)功能的方法。分享給大家供大家參考。具體分析如下:

動態(tài)加載dll,主要是為了擴展功能,增強靈活性而實現(xiàn)的。主要通過xml配置,來獲取所有要動態(tài)加載的dll,然后通過反射機制來調(diào)用dll中的類及其方法。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace DynamicLoadDLL
{
 /// <summary>
 /// 動態(tài)加載dll
 /// </summary>
 public class LoadDLL
 {
  private Assembly ass = null;
  /// <summary>
  /// 加載dll
  /// </summary>
  /// <param name="dllPath">dll文件路徑</param>
  public LoadDLL(string dllPath)
  {
   this.ass = Assembly.LoadFrom(dllPath);
  //利用dll的路徑加載(fullname)
  }
  /// <summary>
  /// 返回反射的dll
  /// </summary>
  /// <returns></returns>
  public Assembly GetAssembly()
  {
   return this.ass;
  }
  /// <summary>
  /// 獲取所有類名
  /// </summary>
  /// <returns></returns>
  public Type[] GetClass()
  {
   return ass.GetTypes();
  }
  /// <summary>
  /// 獲取程序集下的所有文件名
  /// </summary>
  /// <returns></returns>
  public Module[] GetModules()
  {
   return ass.GetModules();
  }
  /// <summary>
  /// 獲取程序集清單文件表中的文件
  /// </summary>
  /// <returns></returns>
  public FileStream[] GetFiles()
  {
   return ass.GetFiles();
  }
 }
}

這個是加載dll的,然后返回一個Assembly類型的一個反射值,如果該dll中有多個命名空間和類的話,就只用一個Assembly類型的一個反射值即可以完成調(diào)用,否則每次生成一個類,都需要反射一次。IO操作相對而言是比較耗費CPU,影響效率的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace DynamicLoadDLL
{
 /// <summary>
 /// 加載類
 /// </summary>
 public class LoadClass
 {
  private static LoadClass dlc = null;
  private Type type;
  private object obj = null;
  //實例
  /// <summary>
  /// 加載dll
  /// </summary>
  /// <param name="ass">dll引用</param>
  /// <param name="nameSpace">類的命名空間</param>
  /// <param name="classPath">類名稱</param>
  private LoadClass(Assembly ass, string nameSpace, string classPath)
  {
   //加載dll后,需要使用dll中某類.
   type = ass.GetType(nameSpace + "." + classPath);
   //利用類型的命名空間和名稱獲得類型
   //需要實例化類型,才可以使用,
   //參數(shù)可以人為的指定,也可以無參數(shù),靜態(tài)實例可以省略
   obj = Activator.CreateInstance(type);
  //利用指定的參數(shù)實例話類型
  }
  /// <summary>
  /// 加載dll
  /// </summary>
  /// <param name="ass">dll引用</param>
  /// <param name="nameSpace">類的命名空間</param>
  /// <param name="classPath">類名稱</param>
  public static LoadClass GetInstance(Assembly ass, string nameSpace, string classPath)
  {
   if (dlc == null)
   {
    dlc = new LoadClass(ass, nameSpace, classPath);
   }
   return dlc;
  }
  /// <summary>
  /// 獲取屬性集
  /// </summary>
  /// <returns>返回屬性值</returns>
  public PropertyInfo[] GetAttrs()
  {
   //調(diào)用類型中的某個屬性:
   PropertyInfo[] prop = type.GetProperties();
   //通過屬性名稱獲得屬性
   //返回屬性集
   return prop;
  }
  public MethodInfo[] GetMethods()
  {
   //調(diào)用類型中的方法:
   MethodInfo[] method = type.GetMethods(BindingFlags.NonPublic);
   //獲得方法集
   //返回方法集
   return method;
  }
  /// <summary>
  /// 獲取屬性值
  /// </summary>
  /// <param name="attrName">屬性名稱</param>
  /// <returns>返回屬性值</returns>
  public object GetAttrValue(string attrName)
  {
   //調(diào)用類型中的某個屬性:
   PropertyInfo prop = type.GetProperty(attrName);
   //通過屬性名稱獲得屬性
   //返回屬性值
   return prop.GetValue(obj);
  }
  /// <summary>
  /// 設(shè)置屬性值
  /// </summary>
  /// <param name="attrName">屬性名稱</param>
  /// <returns>返回屬性值</returns>
  public void SetAttrValue(string attrName, string attrValue)
  {
   //調(diào)用類型中的某個屬性:
   PropertyInfo prop = type.GetProperty(attrName);
   //通過屬性名稱獲得屬性
   //返回屬性值
   prop.SetValue(obj, attrValue);
  }
  /// <summary>
  /// 執(zhí)行類方法
  /// </summary>
  /// <param name="methodName">方法名稱</param>
  /// <param name="paras">參數(shù)</param>
  /// <param name="types">參數(shù)類型</param>
  /// <returns></returns>
  public object GetMethod(string methodName, object[] paras,Type[] types)
  {
   //調(diào)用類型中的某個方法:
   MethodInfo method = type.GetMethod(methodName,types);
   //通過方法名稱獲得方法
   //執(zhí)行方法
   return method.Invoke(obj, paras);
  }
 }
}

上面這個類根據(jù)dll反射值,命名空間和類名,反射出一個具體的類,還提供了屬性和方法的調(diào)用方法。很方便。

這些是我在研究插件編程時,順帶研究的,不太深入。

希望本文所述對大家的C#程序設(shè)計有所幫助。

相關(guān)文章

  • C#網(wǎng)絡(luò)編程中常用特性介紹

    C#網(wǎng)絡(luò)編程中常用特性介紹

    這篇文章介紹了C#網(wǎng)絡(luò)編程中常用特性,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • C#?WPF實現(xiàn)顯示本機網(wǎng)絡(luò)通訊狀態(tài)

    C#?WPF實現(xiàn)顯示本機網(wǎng)絡(luò)通訊狀態(tài)

    這篇文章主要為大家詳細介紹了如何在?WPF?中實現(xiàn)一個界面來顯示本機網(wǎng)絡(luò)接口的狀態(tài),文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下
    2024-12-12
  • C#編寫SqlHelper類

    C#編寫SqlHelper類

    在C#中使用ADO.NET連接數(shù)據(jù)庫的時候,每次連接都要編寫連接,打開,執(zhí)行SQL語句的代碼,很麻煩,編寫一個SqlHelper類,把每次連接都要寫的代碼封裝成方法,把要執(zhí)行的SQL語句通過參數(shù)傳進去,可以大大簡化編碼
    2017-09-09
  • C#類繼承中構(gòu)造函數(shù)的執(zhí)行序列示例詳解

    C#類繼承中構(gòu)造函數(shù)的執(zhí)行序列示例詳解

    這篇文章主要給大家介紹了關(guān)于C#類繼承中構(gòu)造函數(shù)的執(zhí)行序列的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • Unity UI實現(xiàn)拖拽旋轉(zhuǎn)

    Unity UI實現(xiàn)拖拽旋轉(zhuǎn)

    這篇文章主要為大家詳細介紹了Unity UI實現(xiàn)拖拽旋轉(zhuǎn),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Unity UGUI的Outline描邊組件的介紹使用示例

    Unity UGUI的Outline描邊組件的介紹使用示例

    這篇文章主要介紹了Unity UGUI的Outline描邊組件的介紹使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • C#中緩存的基本使用方法

    C#中緩存的基本使用方法

    項目開發(fā)過程中緩存的應(yīng)用到處可見,下面這篇文章主要給大家介紹了關(guān)于C#中緩存的基本使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • 詳解C#中的委托

    詳解C#中的委托

    本文主要介紹了C#中委托的相關(guān)知識。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • C#中的不可變數(shù)據(jù)類型介紹(不可變對象、不可變集合)

    C#中的不可變數(shù)據(jù)類型介紹(不可變對象、不可變集合)

    這篇文章主要介紹了C#中的不可變數(shù)據(jù)類型介紹(不可變對象、不可變集合),本文講解了不可變對象、自定義不可變集合、Net提供的不可變集合、不可變優(yōu)點、不可變對象缺點等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C# 進行圖片壓縮的示例代碼(對jpg壓縮效果最好)

    C# 進行圖片壓縮的示例代碼(對jpg壓縮效果最好)

    這篇文章主要介紹了C# 進行圖片壓縮的示例代碼,幫助大家更好的利用c# 處理圖片,提高辦公效率,感興趣的朋友可以了解下
    2020-11-11

最新評論

濮阳市| 胶州市| 大田县| 竹山县| 酒泉市| 壶关县| 阜南县| 汉源县| 东阳市| 霍邱县| 定西市| 合肥市| 芷江| 吉木萨尔县| 阿克苏市| 紫阳县| 师宗县| 盐城市| 射洪县| 莱阳市| 莱阳市| 明水县| 哈密市| 金门县| 乡城县| 连云港市| 泗洪县| 缙云县| 闽侯县| 永仁县| 伊吾县| 伊金霍洛旗| 普格县| 南乐县| 侯马市| 阳原县| 土默特左旗| 嘉义市| 安阳市| 鄄城县| 清远市|