動的にDLLファイルのクラスメソッドを呼び出すコード - C#4.0のdynamic型を用いたアセンブリの動的呼び出し

動的にDLLファイルのクラスメソッドを呼び出すコードを紹介します。

概要

アセンブリのクラスメソッド(DLLファイル)を動的に呼び出したい場合があります。 こちらの記事ではReflection(リフレクション)機能を用いてクラスメソッドを呼び出せる例を紹介しました。 C#4.0以降では dynamic型が新たに追加され、これを用いるとさらに簡単に動的にクラスのメソッドを呼び出せます。

プログラムコード

以下のコードを記述します。
CalcClass.cs (呼び出されるライブラリ側)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SimpleLib
{
  public class CalcClass
  {
    public int Add(int a, int b)
    {
      return a + b;
    }
  }
}
Form1.cs (呼び出し側)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;

namespace DynamicLoad
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    }
    private void button3_Click(object sender, EventArgs e)
    {
      Assembly asm = Assembly.LoadFrom("SimpleLib.dll");
      dynamic instance = Activator.CreateInstance(asm.GetType("SimpleLib.CalcClass"));
      int r = instance.Add(2, 3);

      textBox1.Text = Convert.ToString(r);

    }
  }
}

説明

Assembly.LoadFrom()メソッドでアセンブリをロードします。
Assembly asm = Assembly.LoadFrom("SimpleLib.dll");


Activator.CreatorInstanceメソッドを用いてアセンブリ内にあるCalcClassクラスのインスタンスを作成します。
dynamic instance = Activator.CreateInstance(asm.GetType("SimpleLib.CalcClass"));
作成されたインスタンスからメソッドを呼び出します。
int r = instance.Add(2, 3);

メソッドの戻り値をテキストボックスに表示します。
textBox1.Text = Convert.ToString(r);

dynamic型を用いるとType.GetMethod()メソッドなどでメソッド情報(MethodInfo)を取得せずに済みます。 また、dynamic型を使わない場合は、Invokeメソッドを呼び出してメソッドを呼び出していましたが、 通常のクラスのように、インスタンスの後ろに.をつける形で、インスタンスからメソッドを呼び出す形で記述できます。
動的にロード、生成したクラスでも通常のクラスと同じ記述スタイルでメソッドを呼び出すことができます。 但し、dynamic型を用いた場合はdynamic型が決定されるのは実行中になるため、コード記述時にはソースコード補完機能は働きません。

AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2010-06-24
Copyright © 1995–2025 iPentec all rights reserverd.