Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9703

リフレクションでpublicでないコンストラクタやメソッドを持つクラスのメソッドを実行する

$
0
0

記事の目的

テストを作りたいけど関数のアクセス修飾子がprivateとかinternalだから単体テストを作れない。

Reflectionでできるかも

さすがにドンピシャなのはないけど色んなページを参考にしたらできた!

今後のためにメモっておこう!

コード

/*
 HogeProjectのHogeProject.FugaNamespace.PiyoClass.NyanMethodを実行させたい場合を考えます。

HogeProject
→参照設定しているプロジェクト、かつHogeProjectを作成した時に自動でVisualStudioが作ってくれる名前空間。

FugaNamespace
→PiyoClassの属すNamespace。

PiyoClass
→クラス名。インスタンスがinternal PiyoClass(int input)で定義されている。

NyanMethod
→internal int NyanMethod(str input)で定義されている関数。
ってことにしてください
*/varflags=System.Reflection.BindingFlags.Instance|System.Reflection.BindingFlags.NonPublic;varinstance=(HogeProject.FugaNamespace.PiyoClass)System.Activator.CreateInstance(typeof(HogeProject.FugaNamespace.PiyoClass),flags,null,newobject[]{0}// インスタンスに引数を与えてる,null);varmethod=instance.GetType().GetMethod("NyanMethod",flags);varresult=method.invoke(instance,newobject[]("hikisu~"));

で、行けるはず。

参考

C#リフレクションTIPS 55連発|Qiita
How do I use reflection to invoke a private method?|StackOverflow
Activator.CreateInstanceを使って型情報からインスタンスを作成する|smdn:総武ソフトウェア推進所


Viewing all articles
Browse latest Browse all 9703

Trending Articles