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

首頁 > 編程 > C# > 正文

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

2020-01-24 00:46:46
字體:
供稿:網(wǎng)友

以下是測試代碼:

新建一個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動態(tài)鏈接庫,然后新建一個winform項目(其他也可以,調(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文件,可以通過命名空間加上類名獲取類的類型,這里應該修改為如下:      //string t_class = "mydll.Class1,mydll";//如果你想要得到的是被本工程內(nèi)部的類,可以“命名空間.父類……類名”;如果是外部的,需要在后面加上“,鏈接庫名”;      //再次感謝thy38的幫助。      //Type ty = Type.GetType(t_class);//這兒在調(diào)試的時候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[] { });//這里是獲取一個類似于類的實例的東東          //object magicClassObject = Activator.CreateInstance(t);//獲取無參數(shù)的構(gòu)造實例還可以通過這樣          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ù)時,這兒就不能這樣子啦          object magicClassObject = magicConstructor.Invoke(new object[] { });          MethodInfo mi = ty.GetMethod("saybeautiful");          object aa = mi.Invoke(magicClassObject, null);//方法有參數(shù)時,需要把null替換為參數(shù)的集合          MessageBox.Show(aa.ToString());        }       }      //AppDomain pluginDomain = (pluginInstanceContainer[key] as PluginEntity).PluginDomain;      //if (pluginDomain != null)      //{      //  AppDomain.Unload(pluginDomain);      // }     }

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 青冈县| 河曲县| 温宿县| 波密县| 黑河市| 大荔县| 黔江区| 昭觉县| 诏安县| 义马市| 综艺| 衡阳市| 和田县| 甘南县| 泌阳县| 云浮市| 绵阳市| 武胜县| 日土县| 丹凤县| 永胜县| 肥西县| 运城市| 沈阳市| 石楼县| 略阳县| 石门县| 交口县| 上高县| 平谷区| 兰考县| 固原市| 绍兴市| 宁南县| 丽江市| 台山市| 吉安市| 扎赉特旗| 五大连池市| 布拖县| 新乡市|