アプリケーション ドメインにおいて起動時に読み込まれない別のアセンブリ (.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 日経過しています。
 

最新文章

  1. Swift入门篇-集合
  2. Android 下的EXIF
  3. 通过桥接虚拟网卡使VMWare和宿主机实现双向通讯
  4. 【转】C 宏
  5. LINQ To SQL 语法及实例大全
  6. 超赞值得一试的六款jQuery插件和CSS3应用
  7. Win32 SDK程序创建一些控件(简单调用InitCommonControlsEx,并指定ICC_LISTVIEW_CLASSES控件就可以了)
  8. SQL大数据操作统计
  9. Layout Resource官方教程(4)<include>与<merge>
  10. 如何用Windbg找到被catch住的C++的异常
  11. logstash 字段类型转换后 需要刷新
  12. 使用Oracle安装账户登录数据库
  13. JQuery中Checkbox的一些功能
  14. git基础命令学习总结
  15. 最新webstorm
  16. flume中sink到hdfs,文件系统频繁产生文件,文件滚动配置不起作用?
  17. Linux---基础指令(一)
  18. Redis事务概念
  19. C# SpinWait 实现
  20. hiho #1196 : 高斯消元·二

热门文章

  1. 深入理解JVM(5)——垃圾收集和内存分配策略
  2. 【洛谷P1516】青蛙的约会
  3. 关于FlexBox的布局
  4. Beamer 中的页面链接
  5. jS处理中英文时间格式化问题
  6. 全卷积网络 FCN 详解
  7. monkeyrunner环境配置
  8. 4. SpringBoot —— 单元测试
  9. 51nod 1228、1258 序列求和
  10. zabbix3.2监控mongodb