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

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

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

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

動(dòng)態(tài)加載dll,主要是為了擴(kuò)展功能,增強(qiáng)靈活性而實(shí)現(xiàn)的。主要通過(guò)xml配置,來(lái)獲取所有要?jiǎng)討B(tài)加載的dll,然后通過(guò)反射機(jī)制來(lái)調(diào)用dll中的類(lèi)及其方法。

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>
 /// 動(dòng)態(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>
  /// 獲取所有類(lèi)名
  /// </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();
  }
 }
}

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

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

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

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

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

相關(guān)文章

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

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

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

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

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

    C#編寫(xiě)SqlHelper類(lèi)

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

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

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

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

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

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

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

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

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

    詳解C#中的委托

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

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

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

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

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

最新評(píng)論

临城县| 公安县| 上高县| 彭州市| 耒阳市| 远安县| 大埔区| 华坪县| 南澳县| 枣庄市| 兴和县| 班玛县| 马龙县| 嵊州市| 台东市| 平利县| 临湘市| 宁安市| 札达县| 曲阜市| 泽州县| 从化市| 永寿县| 南和县| 阿拉善右旗| 砀山县| 措美县| 三原县| 兴义市| 西和县| 沛县| 高青县| 溆浦县| 新兴县| 灵寿县| 洛宁县| 曲松县| 北海市| 广东省| 彭泽县| 凌海市|