アセンブリの内部クラスにアクセスするにはどうすればよいですか? System.ComponentModel.Design.DesignerHost にアクセスしたいとします。ここで、DesignerHost は内部のシール クラスです。
アセンブリと型をロードするコードを作成するにはどうすればよいですか?
アセンブリの内部クラスにアクセスするにはどうすればよいですか? System.ComponentModel.Design.DesignerHost にアクセスしたいとします。ここで、DesignerHost は内部のシール クラスです。
アセンブリと型をロードするコードを作成するにはどうすればよいですか?
一般に、これを行うべきではありません。型が internal とマークされている場合、それはアセンブリの外部から使用することを意図していないことを意味します。これは、後のバージョンで削除、変更などされる可能性があります。
ただし、リフレクションを使用すると、パブリックではない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");