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

首頁 > 編程 > C# > 正文

c# 動態加載dll文件,并實現調用其中的簡單方法

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

以下是測試代碼:

新建一個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#教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涿州市| 孝义市| 增城市| 韶关市| 安宁市| 浮梁县| 奈曼旗| 阜南县| 高阳县| 汕尾市| 平顶山市| 平凉市| 太仆寺旗| 江华| 青阳县| 孙吴县| 板桥市| 宜昌市| 会昌县| 鄂温| 闽清县| 天峨县| 商都县| 颍上县| 浙江省| 吉安市| 古田县| 永定县| 康平县| 临漳县| 黔南| 泽普县| 措美县| 米林县| 全椒县| 泾阳县| 金塔县| 大竹县| 勐海县| 珠海市| 兴城市|