0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

別アセンブリの非公開クラスのメソッドをリフレクションで実行する方法

Last updated at Posted at 2022-04-06

0. はじめに

やたら情報量が多いタイトルになってしまった🙄

公開(アクセシビリティがpublic)されているクラスの非公開メソッドを直接実行したい場合は、リフレクションで実行すればOKかと思います。

あくまでテストのためですよ?テスト以外ではそんなことになってしまう設計がダメですね😇

しかし、

別アセンブリ かつ 非公開(アクセシビリティがinternal)

のメソッドを実行する必要があったので、そのときやった方法を備忘録として残しておきたいと思います。

あくまでテストのためですよ?(略)

1. やったこと

// Type.GetType("名前空間.クラス名, アセンブリ名")を指定し、非公開クラスを取得します。
var hogeType = Type.GetType("Hoge.Logger, LoggerLib");

// ↑で取得したクラスのインスタンスを生成します。
// コンストラクタ引数がある場合は、例みたいにCreateInstance()の第2引数にパラメータを指定します。
// コンストラクタ引数がない場合は、指定不要です。
var hogeImpl = Activator.CreateInstance(hogeType, xxx);

// リフレクションで対象のメソッドを指定します。
// オーバーロードがある場合は、例みたいにGetMethod()の第2引数にパラメータを指定します。
// コンストラクタ引数がない場合は、指定不要です。
var writeMethod = loggerImpl.GetType().GetMethod("Write", new[] { typeof(string), typeof(string) });

// 実行します。
writeMethod.Invoke(hogeImpl, new object[] { title, message });

2. おわりに

ベストプラクティスじゃなかったらごめんなさい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?