アプリケーション ドメインにおいて起動時に読み込まれない別のアセンブリ (.dll や .exe) を読み込む場合、System.Reflection.Assemby クラスの Load メソッドを使用します。この場合はアセンブリ名を指定しますが、特定の場所に保持しているファイルからアセンブリをロードする場合は、LoadFrom メソッドを使用します。下記のサンプルコードでは、予め、「MyLibrary」という名前空間に「MyBirthday」というクラスを実装した 「MyLibrary.dll」がアプリケーション フォルダに配備されているものとします。また、この MyBirthDay クラスには 「CalcDaysFromBirthDate」という DateTime を引数にする void 型のメソッドが実装されているものとします。

MyLibrary.cs

C#
using System; 
using System.Text; 
 
namespace MyLibrary 

    public class MyBirthday 
    { 
        public void CalcDaysFromBirthDate(DateTime birthDate) 
        { 
            StringBuilder sb = new StringBuilder(); 
            sb.Append("あなたの誕生日は "); 
            sb.Append(birthDate.ToShortDateString()); 
            sb.Append(" です。"); 
            sb.Append("誕生日から "); 
            sb.Append(DateTime.Today.Subtract(birthDate).Days); 
            sb.Append(" 日経過しています。"); 
            Console.WriteLine(sb.ToString()); 
        } 
    } 
}
 

上記のアセンブリを読み込んだサンプル コードは下記の通りです。

C#
using System; 
using System.IO; 
using System.Reflection; 
 
namespace CodeRecipe_LoadAssembly_CS 

    class Program 
    { 
        static void Main(string[] args) 
        { 
            DateTime birthDate; 
            Console.Write(@"誕生日を入力してください (yyyy/MM/dd):"); 
            while (!DateTime.TryParse(Console.ReadLine(), out birthDate)) 
            { 
                Console.Write("入力が正しくありません。再度入力してください (yyyy/MM/dd):"); 
            } 
            try 
            { 
                Assembly asm = Assembly.Load("MyLibrary"); 
                Type myType = asm.GetType("MyLibrary.MyBirthday"); 
                MethodInfo myMethod = myType.GetMethod("CalcDaysFromBirthDate"); 
                object obj = Activator.CreateInstance(myType); 
                myMethod.Invoke(obj, new object[] { birthDate }); 
            } 
            catch (Exception e) 
            {                 
                Console.WriteLine(e); 
            } 
            Console.ReadLine(); 
        } 
    } 
}
 

このコードでは Assembly クラスの静的メソッドである Load メソッドを使用し、アセンブリをロードしています。また、GetType メソッドにて型を取得した後、Type.GetMethod メソッドを使用することで MyBirthdaty.CalcDaysFromBirthDate メソッドの情報を取得しています。

C#
Assembly asm = Assembly.Load("MyLibrary"); 
Type myType = asm.GetType("MyLibrary.MyBirthday"); 
MethodInfo myMethod = myType.GetMethod("CalcDaysFromBirthDate");
 

更に、読み込んだアセンブリからオブジェクト インスタンスを Activator.CreateInstance メソッドにより作成し、MethodInfo.Invoke メソッドを用いることでオブジェクト、メソッドに必要な引数を設定しています。

C#
object obj = Activator.CreateInstance(myType); 
myMethod.Invoke(obj, new object[] { birthDate });
 

上記のサンプルコードの実行結果 (2010 年 5 月 25 日時点) は下記の通りです。

C#
誕生日を入力してください(yyyy/MM/dd):1978/08/13 
あなたの誕生日は 1978/08/13 です。誕生日から 11608 日経過しています。
 

[C#] 動的にアセンブリをロードする的更多相关文章

  1. eafier 簡單易用 HTML、CSS 網頁編輯器(可自動插入 Tag 標籤)

    很久很久以前,一般人要做網頁的話大概都會用 FrontPage 之類的工具,更進階一點的會用 Dreamweaver 等軟體.雖然上述軟體提供很方便的「所見即所得」的編輯預覽模式,但寫出來的網頁程式碼 ...

  2. [原] XAF 如何啟用ListView橫向滾動條

    using System; using DevExpress.ExpressApp; using DevExpress.ExpressApp.Win.Editors; using DevExpress ...

  3. JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (3):部署設定及應用 (转帖)

    說明:這一篇主要是說明如何將程式部署到Application Server,以及程式如何運作,產生的檔案置於何處,以及如何以瀏覽器呈現(Applet),或是當成桌面應用程式,或是 桌面Applet,這 ...

  4. JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (2):JavaFX建立及程式碼說明 (转帖)

    說明:就如同標題一樣,前端會用到JavaFX.Swing.Java Web Start.Google Map 的技術, 後端就是JDBC.Servlet的技術,以及我們會簽署認證jar檔案,這樣才可存 ...

  5. JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (1):NetBeans 寫 Servlet (转帖)

    JavaFX結合 JDBC, Servlet, Swing, Google Map及動態產生比例圖 (1):NetBeans 寫 Servlet 功能:這支程式的主要功能是將 javafx 與 swi ...

  6. [Xamarin] 動態載入Fragment (转帖)

    這篇我們來動態加入,一樣務求好懂簡單 1.一樣先將專案調整成3.0以上版本 2.首先建立自定Control的Layout \Resources\Layout\MyControlLayout1.axml ...

  7. 歐洲國家拓展其移動和IT服務業務

    中興德國子公司與JOIN簽訂了一項綜合託管服務合同,在該合同中,公司將全面負責為盧森堡和比利時的JOIN核心網路提供網路運營,點對點無線網路報告,新品發佈和維護,還負責故障檢查.維修.測試和軟體升級. ...

  8. iphone6 帶回家”活動!

    十一小長假即將來臨,周向榮還準備窩在家裏坐等“鋒菲戀”的後續結果嗎?雖然宅男無罪,但是請不要繼續在論壇裏高呼“李亞鵬娶了張柏芝”等口號,放下你“不吐槽會死星人”的特質,走出家門去領略一下祖國的大好山河 ...

  9. 問題排查:行動裝置網頁前端 UI 設計 (1)

    這是最近開始接手的一個微信公眾平台專案, 在重整後端程式碼時,因為也需要透過前端來看效果, 所以就因此在前端的部分遇到了不少問題, 畢竟這是以前沒接觸過的領域 (早年的網頁應用程式開發沒有那麼多分工) ...

  10. 問題排查:F5啟動偵錯後所提示的錯誤 (2)

    原始專案版本:Visual Studio 2005 開發環境:Visual Studio 2013 偵錯運行環境:IIS Express 啟動偵錯後,錯誤提示內容如下: HTTP 错误 403.14 ...

随机推荐

  1. Input标签使用整理

    0 写在前面 对于程序而言I/O是一个程序的重要组成部分.程序的输入.输出接口,指定了程序与用户之间的交互方式.对于前端开发而言,input标签也有着其重要地位,它为用户向服务端提交数据提供了可能. ...

  2. Vue(小案例_vue+axios仿手机app)_上拉加载

    ---恢复内容开始--- 一.前言                                                                                    ...

  3. 安装java8

    很多软件都是在java基础上搭建的 ,所以使用的前提是搭建好java的环境,记录下 linux版本:centos7.2 一.下载 到官网下载最新的java8 链接 注意,因为官网需要同意协议才能下载, ...

  4. jenkins持续集成原理

    转载: 原文地址:http://www.2cto.com/kf/201609/544550.html 持续集成 开发中,我们经常遇到一些奇怪问题,比如本地可以编译成功的代码但是同事们更新代码后编译出错 ...

  5. Pandas系列(八)-筛选工具介绍

    内容目录 1. 字典式 get 访问 2. 属性访问 3. 切片操作 4. 通过数字筛选行和列 5. 通过名称筛选行和列 6. 布尔索引 7. isin 筛选 8. 通过Callable筛选 数据准备 ...

  6. ORA-28000错误的原因及解决办法

    当使用SQL*Plus登录时,Oracle数据库时提示“ORA-28000:帐号被锁定”. 导致出现改错误的原因是:在oracle database 11g中,默认在default概要文件中设置了“F ...

  7. windows下创建启动脚本bat

    最主要是运用bat命令. call执行命令 比如 启动solr的服务,以前要进去solr的目录,然后bin/solr start    这样很麻烦.可以写个脚本放到桌面. call %CATALINA ...

  8. [Android] Android RxJava2+Retrofit2+OkHttp3 的使用(一) --基础篇 Retrofit2 的使用

    本文是 Android RxJava2+Retrofit2+OkHttp3 的使用(一) --基础篇 Retrofit2 的使用 本文的目标是用 Retrofit写一个网络请求: 本文以从获取天气预报 ...

  9. django分页器

    网站页面的分页效果可以通过分页器实现 分页器的使用 urls.py from django.contrib import admin from django.urls import path from ...

  10. java(9)类和对象

    一.理解什么是类和对象 万事万物皆对象 1.1.属性——对象具有的特征(特点) 1.2.方法——对象可执行的操作(能干什么事) 1.3.对象的定义: 是一个客观存在的,看的见或摸得着的实体,由属性和方 ...