「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>.NET開発]] -戻る --[[.NET開発]] --[[.NET Coreへの移行]] * 目次 [#s6a5c37b] #contents *概要 [#z3199cb8] System.TypeとSystem.Reflection名前空間のクラスと共に使用する。 *詳細 [#z93ab95a] **使用例 [#xf080bff] リフレクションを使用すると、以下のような処理を実装できる。 ***以下の情報を取得できる。 [#da4a4467] -読み込まれたアセンブリについての情報、 -およびそのアセンブリ内に定義されている~ クラス、インターフェイス、値型などの型。 ***型インスタンス [#k016886b] -実行時に型インスタンスを作成 -作成した型インスタンスを呼出 ***参考 [#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] -一般的に遅いと言われているが、以下で実用的な速度までチューニング可能。 --[[System.Reflection.Emit]] --[[式木(Expression Tree)]] --dynamic -以下で生成したアクセッサのキャッシュが実用的。 ***[[System.Reflection.Emit]] [#xda7d2c6] 静的なコードの数倍程度までは速くできる。 ***[[式木(Expression Tree)]] [#ldcd0275] -静的なコードの数倍程度までは速くできる。 -[[System.Reflection.Emit]]するものと比べてそう大きな差はない。 **互換性 [#kcfb6b79] -[[コチラ>#y3d0103d]]を見ると、互換性ありそう。 -ただし、[[System.Reflection.Emit>#xda7d2c6]]、[[式木(Expression Tree)>#ldcd0275]]については、不明。 *参考 [#n25886b7] -実行時型情報 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C~ https://ufcpp.net/study/csharp/sp_reflection.html -C#リフレクションTIPS 55連発 - Qiita~ https://qiita.com/gushwell/items/91436bd1871586f6e663 **実装 [#ha889611] -https://github.com/OpenTouryoProject/OpenTouryo/blob/develop/root/programs/CS/Frameworks/Infrastructure/Public/Util/Latebind.cs **性能 [#zf75c587] -なぜリフレクションは遅いのか | POSTD~ https://postd.cc/why-is-reflection-slow/ -[雑記] 動的コード生成のパフォーマンス - C# によるプログラミング入門 | ++C++; // 未確認飛行 C~ https://ufcpp.net/study/csharp/misc_dynamic.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 **互換性 [#y3d0103d] -c# - Using Reflection in .NET Core - Stack Overflow~ https://stackoverflow.com/questions/36118978/using-reflection-in-net-core -c# – .NET CoreでReflectionを使用する - コードログ~ https://codeday.me/jp/qa/20190121/184182.html **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 -リフレクション (Visual Basic) | Microsoft Docs~ https://docs.microsoft.com/ja-jp/dotnet/visual-basic/programming-guide/concepts/reflection ---- Tags: [[:プログラミング]], [[:.NET開発]]