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

c# 動(dòng)態(tài)加載dll文件,并實(shí)現(xiàn)調(diào)用其中的方法(推薦)

 更新時(shí)間:2017年02月07日 10:56:34   投稿:jingxian  
下面小編就為大家?guī)硪黄猚# 動(dòng)態(tài)加載dll文件,并實(shí)現(xiàn)調(diào)用其中的方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

以下是測(cè)試代碼:

新建一個(gè)classlibrary,包含兩個(gè)類class1和class2,這兩個(gè)類中分別有一個(gè)方法,都是返回一個(gè)字符串,代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace mydll
{
  public class Class1
  {
    public Class1()
    {

    }
    public string sayhello()
    {
      return "hello,word!";
    }
  }

  public class Class2
  {
    public Class2()
    {

    }

    public string saybeautiful()
    {
      return "beautiful,very good!";
    }
  }

}

在編譯完成后會(huì)生成一個(gè)mydll.dll動(dòng)態(tài)鏈接庫,然后新建一個(gè)winform項(xiàng)目(其他也可以,調(diào)試用):

private void button1_Click(object sender, EventArgs e)
    {
      string path = @"D:\123\mydll\mydll\bin\Debug\mydll.dll";


      //Byte[] byte1 = System.IO.File.ReadAllBytes(path);//也是可以的
      //Assembly assem = Assembly.Load(byte1);

      Assembly assem = Assembly.LoadFile(path);


      //string t_class = "mydll.Class1";//理論上已經(jīng)加載了dll文件,可以通過命名空間加上類名獲取類的類型,這里應(yīng)該修改為如下:

      //string t_class = "mydll.Class1,mydll";//如果你想要得到的是被本工程內(nèi)部的類,可以“命名空間.父類……類名”;如果是外部的,需要在后面加上“,鏈接庫名”;

      //再次感謝thy38的幫助。

      //Type ty = Type.GetType(t_class);//這兒在調(diào)試的時(shí)候ty=null,一直不理解,望有高人可以解惑

      Type[] tys = assem.GetTypes();//只好得到所有的類型名,然后遍歷,通過類型名字來區(qū)別了
      foreach (Type ty in tys)//huoquleiming
      {
        if (ty.Name == "Class1")
        {
          ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);//獲取不帶參數(shù)的構(gòu)造函數(shù)
          object magicClassObject = magicConstructor.Invoke(new object[] { });//這里是獲取一個(gè)類似于類的實(shí)例的東東

          //object magicClassObject = Activator.CreateInstance(t);//獲取無參數(shù)的構(gòu)造實(shí)例還可以通過這樣
          MethodInfo mi = ty.GetMethod("sayhello");
          object aa=mi.Invoke(magicClassObject, null);
          MessageBox.Show(aa.ToString());//這兒是執(zhí)行類class1的sayhello方法
        }
        if (ty.Name == "Class2")
        {
          ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);//獲取不帶參數(shù)的構(gòu)造函數(shù),如果有構(gòu)造函數(shù)且沒有不帶參數(shù)的構(gòu)造函數(shù)時(shí),這兒就不能這樣子啦
          object magicClassObject = magicConstructor.Invoke(new object[] { });
          MethodInfo mi = ty.GetMethod("saybeautiful");
          object aa = mi.Invoke(magicClassObject, null);//方法有參數(shù)時(shí),需要把null替換為參數(shù)的集合
          MessageBox.Show(aa.ToString());
        } 
      }

      //AppDomain pluginDomain = (pluginInstanceContainer[key] as PluginEntity).PluginDomain;
      //if (pluginDomain != null)
      //{
      //  AppDomain.Unload(pluginDomain);
      // } 

    }

以上這篇c# 動(dòng)態(tài)加載dll文件,并實(shí)現(xiàn)調(diào)用其中的方法(推薦)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#中觀察者模式的3種實(shí)現(xiàn)方式

    C#中觀察者模式的3種實(shí)現(xiàn)方式

    這篇文章主要介紹了C#中觀察者模式的3種實(shí)現(xiàn)方式,本文講解了利用.net的Event模型來實(shí)現(xiàn)、利用.net中IObservable<out T>和IObserver<in T>實(shí)現(xiàn)觀察者模式、Action函數(shù)式方案等3種方法,需要的朋友可以參考下
    2015-03-03
  • 通俗易懂的C#之反射教程

    通俗易懂的C#之反射教程

    這篇文章主要介紹了通俗易懂的C#之反射教程,本文深入分析了反射內(nèi)部的原理,剖析了內(nèi)部屬性、方法的運(yùn)作,并用通俗易懂的語言闡述,需要的朋友可以參考下
    2015-01-01
  • 基于C#編寫一個(gè)修改文件時(shí)間屬性的小工具

    基于C#編寫一個(gè)修改文件時(shí)間屬性的小工具

    這篇文章主要為大家詳細(xì)介紹了如何基于C#編寫一個(gè)修改文件時(shí)間屬性的小工具,可以批量修改文件的創(chuàng)建時(shí)間、最后訪問時(shí)間和最后修改時(shí)間,需要的可以參考下
    2024-11-11
  • C#把寫好的類編譯成dll文件的操作方法

    C#把寫好的類編譯成dll文件的操作方法

    在C#中,DLL文件是一種可重用的代碼庫,它包含了已編譯的函數(shù)、類、數(shù)據(jù)和資源,DLL文件可以被多個(gè)應(yīng)用程序共享和重用,這樣可以提高代碼的復(fù)用性和可維護(hù)性,所以本文給大家介紹了C#如何把寫好的類編譯成dll文件,需要的朋友可以參考下
    2024-09-09
  • c#委托詳解和和示例分享

    c#委托詳解和和示例分享

    這篇文章詳細(xì)探討了C#中的委托,列舉其主要的實(shí)現(xiàn)方式,并分析其在設(shè)計(jì)層面和編碼層面帶來的好處,最后會(huì)討論其安全性和執(zhí)行效率等,當(dāng)然還有實(shí)現(xiàn)示例
    2014-03-03
  • 利用C#驗(yàn)證哥德巴赫猜想的示例代碼

    利用C#驗(yàn)證哥德巴赫猜想的示例代碼

    哥德巴赫猜想(Goldbach’s?Conjecture)是數(shù)學(xué)領(lǐng)域的一個(gè)著名猜想,大致內(nèi)容為任何一個(gè)大于2的偶數(shù)都可以表示為兩個(gè)質(zhì)數(shù)之和,下面我們就來看看如何利用C#驗(yàn)證這一猜想呢
    2024-03-03
  • C#實(shí)現(xiàn)通過ffmpeg從flv視頻文件中截圖的方法

    C#實(shí)現(xiàn)通過ffmpeg從flv視頻文件中截圖的方法

    這篇文章主要介紹了C#實(shí)現(xiàn)通過ffmpeg從flv視頻文件中截圖的方法,實(shí)例分析了C#使用ffmpeg操作flv文件的技巧,需要的朋友可以參考下
    2015-03-03
  • C#處理JPEG頭信息的方法

    C#處理JPEG頭信息的方法

    相信大家肯定都看過用C或C++處理JPEG頭信息的程序了,我也看了,不過因?yàn)槲也欢瓹,看得我頭疼。所以我還是決定用C#來寫吧
    2013-05-05
  • C#刪除Word文檔中的段落的方法示例

    C#刪除Word文檔中的段落的方法示例

    在編輯Word文檔時(shí),我們有時(shí)需要調(diào)整段落的布局、刪除不必要的段落以優(yōu)化文檔的結(jié)構(gòu)和閱讀體驗(yàn),本文將通過以下3個(gè)簡(jiǎn)單示例演示如何使用免費(fèi).NET庫刪除Word文檔中的段落 ,需要的朋友可以參考下
    2024-09-09
  • C#內(nèi)存管理CLR深入講解(下篇)

    C#內(nèi)存管理CLR深入講解(下篇)

    本文詳細(xì)講解了C#內(nèi)存管理CLR的內(nèi)存分配和對(duì)大對(duì)象回收,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01

最新評(píng)論

马龙县| 千阳县| 白山市| 渭源县| 镶黄旗| 阳曲县| 天气| 崇文区| 南丰县| 泸溪县| 永城市| 峨眉山市| 科技| 汽车| 高雄市| 滦南县| 清水河县| 长沙县| 香河县| 西乡县| 凭祥市| 图们市| 汽车| 兰考县| 喀喇| 新丰县| 长沙市| 武川县| 衡山县| 靖宇县| 揭阳市| 伊通| 龙江县| 碌曲县| 五莲县| 海城市| 隆回县| 清水河县| 合江县| 台北县| 武邑县|