亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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)的。主要通過xml配置,來獲取所有要?jiǎng)討B(tài)加載的dll,然后通過反射機(jī)制來調(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>
 /// 動(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>
  /// 獲取所有類名
  /// </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類型的一個(gè)反射值,如果該dll中有多個(gè)命名空間和類的話,就只用一個(gè)Assembly類型的一個(gè)反射值即可以完成調(diào)用,否則每次生成一個(gè)類,都需要反射一次。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>
 /// 加載類
 /// </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">類的命名空間</param>
  /// <param name="classPath">類名稱</param>
  private LoadClass(Assembly ass, string nameSpace, string classPath)
  {
   //加載dll后,需要使用dll中某類.
   type = ass.GetType(nameSpace + "." + classPath);
   //利用類型的命名空間和名稱獲得類型
   //需要實(shí)例化類型,才可以使用,
   //參數(shù)可以人為的指定,也可以無參數(shù),靜態(tài)實(shí)例可以省略
   obj = Activator.CreateInstance(type);
  //利用指定的參數(shù)實(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)用類型中的某個(gè)屬性:
   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)用類型中的某個(gè)屬性:
   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)用類型中的某個(gè)屬性:
   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)用類型中的某個(gè)方法:
   MethodInfo method = type.GetMethod(methodName,types);
   //通過方法名稱獲得方法
   //執(zhí)行方法
   return method.Invoke(obj, paras);
  }
 }
}

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

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

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

相關(guān)文章

  • C# Request.Form用法案例詳解

    C# Request.Form用法案例詳解

    這篇文章主要介紹了C# Request.Form用法案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#操作圖片讀取和存儲(chǔ)SQLserver實(shí)現(xiàn)代碼

    C#操作圖片讀取和存儲(chǔ)SQLserver實(shí)現(xiàn)代碼

    用C#將Image轉(zhuǎn)換成byte[]并插入數(shù)據(jù)庫/將圖片數(shù)據(jù)從SQLserver中取出來并顯示到pictureBox控件上,接下來將為你詳細(xì)介紹下實(shí)現(xiàn)步驟,感興趣的你可以參考下
    2013-03-03
  • C#請(qǐng)求http向網(wǎng)頁發(fā)送接收數(shù)據(jù)的方法

    C#請(qǐng)求http向網(wǎng)頁發(fā)送接收數(shù)據(jù)的方法

    這篇文章主要為大家詳細(xì)介紹了C#請(qǐng)求http向網(wǎng)頁發(fā)送數(shù)據(jù)、網(wǎng)頁接收的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • C# 批量生成隨機(jī)密碼必須包含數(shù)字和字母并用加密算法加密

    C# 批量生成隨機(jī)密碼必須包含數(shù)字和字母并用加密算法加密

    這篇文章主要介紹了C# 批量生成隨機(jī)密碼必須包含數(shù)字和字母并用加密算法加密,需要的朋友參考下
    2017-01-01
  • 解決unity rotate旋轉(zhuǎn)物體 限制物體旋轉(zhuǎn)角度的大坑

    解決unity rotate旋轉(zhuǎn)物體 限制物體旋轉(zhuǎn)角度的大坑

    這篇文章主要介紹了解決unity rotate旋轉(zhuǎn)物體 限制物體旋轉(zhuǎn)角度的大坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#檢測(cè)DataSet是否為空的方法

    C#檢測(cè)DataSet是否為空的方法

    這篇文章主要介紹了C#檢測(cè)DataSet是否為空的方法,涉及C#操作DataSet的技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-04-04
  • C#中的靜態(tài)字段double.Epsilon實(shí)例詳解

    C#中的靜態(tài)字段double.Epsilon實(shí)例詳解

    double.Epsilon 是C#中的一個(gè)靜態(tài)字段,表示 double 數(shù)據(jù)類型的最小可表示的正數(shù)值,這篇文章主要介紹了C#中的靜態(tài)字段double.Epsilon的相關(guān)知識(shí),需要的朋友可以參考下
    2024-01-01
  • C#中調(diào)用MySQL存儲(chǔ)過程的方法

    C#中調(diào)用MySQL存儲(chǔ)過程的方法

    這篇文章主要介紹了C#中調(diào)用MySQL存儲(chǔ)過程的方法,涉及C#數(shù)據(jù)庫操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • C#和lua相互調(diào)用的方法教程

    C#和lua相互調(diào)用的方法教程

    lua是一種腳本語言,可以方便的移植到各種宿主語言中,并且可以支持熱更新,在游戲開發(fā)中也能當(dāng)做主要的語言來編寫游戲的邏輯,所以這篇文章主要給大家介紹了關(guān)于C#和lua相互調(diào)用的方法教程,需要的朋友可以參考下。
    2017-11-11
  • C#中的try catch finally用法分析

    C#中的try catch finally用法分析

    這篇文章主要介紹了C#中的try catch finally用法,以實(shí)例形式分析了try catch finally針對(duì)錯(cuò)誤處理時(shí)的不同用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12

最新評(píng)論