国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

c# 動態加載dll文件,并實現調用其中的方法(推薦)

2019-10-29 21:14:16
字體:
來源:轉載
供稿:網友

以下是測試代碼:

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

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!";    }  }}

在編譯完成后會生成一個mydll.dll動態鏈接庫,然后新建一個winform項目(其他也可以,調試用):

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";//理論上已經加載了dll文件,可以通過命名空間加上類名獲取類的類型,這里應該修改為如下:      //string t_class = "mydll.Class1,mydll";//如果你想要得到的是被本工程內部的類,可以“命名空間.父類……類名”;如果是外部的,需要在后面加上“,鏈接庫名”;      //再次感謝thy38的幫助。      //Type ty = Type.GetType(t_class);//這兒在調試的時候ty=null,一直不理解,望有高人可以解惑      Type[] tys = assem.GetTypes();//只好得到所有的類型名,然后遍歷,通過類型名字來區別了      foreach (Type ty in tys)//huoquleiming      {        if (ty.Name == "Class1")        {          ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);//獲取不帶參數的構造函數          object magicClassObject = magicConstructor.Invoke(new object[] { });//這里是獲取一個類似于類的實例的東東          //object magicClassObject = Activator.CreateInstance(t);//獲取無參數的構造實例還可以通過這樣          MethodInfo mi = ty.GetMethod("sayhello");          object aa=mi.Invoke(magicClassObject, null);          MessageBox.Show(aa.ToString());//這兒是執行類class1的sayhello方法        }        if (ty.Name == "Class2")        {          ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);//獲取不帶參數的構造函數,如果有構造函數且沒有不帶參數的構造函數時,這兒就不能這樣子啦          object magicClassObject = magicConstructor.Invoke(new object[] { });          MethodInfo mi = ty.GetMethod("saybeautiful");          object aa = mi.Invoke(magicClassObject, null);//方法有參數時,需要把null替換為參數的集合          MessageBox.Show(aa.ToString());        }       }      //AppDomain pluginDomain = (pluginInstanceContainer[key] as PluginEntity).PluginDomain;      //if (pluginDomain != null)      //{      //  AppDomain.Unload(pluginDomain);      // }     }

以上這篇c# 動態加載dll文件,并實現調用其中的方法(推薦)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到c#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀来县| 长白| 什邡市| 伊宁市| 旌德县| 长兴县| 鹿泉市| 革吉县| 丰都县| 广德县| 临颍县| 元阳县| 康保县| 普兰县| 威远县| 肥城市| 孝昌县| 绥宁县| 新昌县| 大姚县| 盱眙县| 乳源| 松潘县| 吉木乃县| 哈巴河县| 绍兴市| 佛冈县| 车致| 连云港市| 潮州市| 吉水县| 临桂县| 东阿县| 伊川县| 沁源县| 乌什县| 安化县| 广东省| 汉沽区| 仁化县| 客服|