「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>.NET開発]] * 目次 [#s6a5c37b] #contents *概要 [#z3199cb8] -System.TypeとSystem.Reflection名前空間のクラスと共に使用する。 -リフレクションを使用すると、以下のような処理を実装できる。 --以下の情報を取得できる。 ---読み込まれたアセンブリについての情報、 ---およびそのアセンブリ内に定義されている~ クラス、インターフェイス、値型などの型。 --型インスタンス ---実行時に型インスタンスを作成 ---作成した型インスタンスを呼出 *詳細 [#z93ab95a] **使用例 [#xf080bff] 具体的には以下のような処理を実装できる。 ***参考 [#lec8a188] -.NET Tips (VB.NET,C#...) --型(クラス、構造体など)のすべてのメンバを取得する~ https://dobon.net/vb/dotnet/programing/typegetmembers.html --型に指定した名前のメンバがあるか調べる~ https://dobon.net/vb/dotnet/programing/typegetmember.html --型のメンバを動的に呼び出す~ https://dobon.net/vb/dotnet/programing/typeinvokemember.html --隠蔽されている非パブリックメンバを呼び出す~ https://dobon.net/vb/dotnet/programing/invokenonpublicmember.html --フォームに配置されているコントロールを名前で探す~ https://dobon.net/vb/dotnet/control/findcontrolbyname.html --画像やテキストファイルを実行ファイルに埋め込む~ https://dobon.net/vb/dotnet/programing/bitmapresource.html **性能 [#xce7f5ce] -一般的に遅いと言われているが、以下で実用的な速度までチューニング可能。 --IL 生成 --[[式木(Expression Tree)]] --dynamic -[[式木(Expression Tree)]]レベルで生成したアクセッサのキャッシュが実用的。 --静的なコードの数倍程度までは速くできる。 --IL 生成するものと比べてそう大きな差はない。 ***参考 [#zf75c587] -なぜリフレクションは遅いのか | POSTD~ https://postd.cc/why-is-reflection-slow/ -[雑記] 動的コード生成のパフォーマンスs - C# によるプログラミング入門 | ++C++; // 未確認飛行 C~ https://ufcpp.net/study/csharp/misc_dynamic.html -neue cc - Expression Treeのこね方・入門編 - 動的にデリゲートを生成してリフレクションを高速化~ http://neue.cc/2011/04/20_317.html -Reflection vs. compiled expressions vs. delegates - Performance comparison - www.palmmedia.de~ http://www.palmmedia.de/blog/2012/2/4/reflection-vs-compiled-expressions-vs-delegates-performance-comparison *参考 [#n25886b7] -実行時型情報 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C~ https://ufcpp.net/study/csharp/sp_reflection.html -C#リフレクションTIPS 55連発 - Qiita~ https://qiita.com/gushwell/items/91436bd1871586f6e663 **microsoft.com [#x3b3dba0] -リフレクション (C# および Visual Basic)~ https://msdn.microsoft.com/ja-jp/library/ms173183.aspx -リフレクション (C#) | Microsoft Docs~ https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/reflection **実装例 [#ha889611] -https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Util/Latebind.cs -https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Dto/DataToDictionary.cs ---- Tags: [[:プログラミング]], [[:.NET開発]]