アセンブリの内部クラスにアクセスするにはどうすればよいですか? System.ComponentModel.Design.DesignerHostにアクセスしたいとします。ここで、DesignerHostは内部の密閉されたクラスです。
アセンブリと型をロードするコードを作成するにはどうすればよいですか?.
一般に、あなたはこれを行うべきではありません-タイプが内部としてマークされている場合、それはアセンブリの外部からそれを使用するつもりがないことを意味します。後のバージョンで削除、変更などされる可能性があります。
ただし、リフレクションdoesを使用すると、パブリックではない型やメンバーにアクセスできます。BindingFlags
引数を取るオーバーロードを探すだけで、渡すフラグにBindingFlags.NonPublic
を含めます。
完全修飾された型の名前(アセンブリ情報を含む)がある場合は、 Type.GetType(string)
を呼び出すだけです 動作するはずです。事前にアセンブリを知っていて、そのアセンブリ内のパブリックタイプを知っている場合、typeof(TheOtherType).Assembly
を使用してアセンブリ参照を取得する方が一般的に簡単で、 Assembly.GetType(string)
。
例で引用したアセンブリをロードして入力するには:
Assembly design = Assembly.LoadFile(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll");
Type designHost = design.GetType("System.ComponentModel.Design.DesignerHost");