「[[マイクロソフト系技術情報 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]
-一般的に遅いと言われているが、以下で実用的な速度までチューニング可能。
--[[System.Reflection.Emit]]
--[[式木(Expression Tree)]]
--dynamic

-以下で生成したアクセッサのキャッシュが実用的。

***[[System.Reflection.Emit]] [#xda7d2c6]
静的なコードの数倍程度までは速くできる。

***[[式木(Expression Tree)]] [#ldcd0275]
-静的なコードの数倍程度までは速くできる。
-[[System.Reflection.Emit]]するものと比べてそう大きな差はない。

***参考 [#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

*参考 [#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

***性能 [#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

**実装例 [#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開発]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS