1. ホーム
  2. c#

Reflectionを使用して内部クラスにアクセスする方法

2023-08-09 01:17:35

質問

アセンブリの内部クラスにアクセスするにはどうすればよいですか。 私がSystem.ComponentModel.Design.DesignerHostにアクセスしたい場合を考えてみましょう。ここで、DesignerHostは内部クラスであり、シールされたクラスです。

どのように私はアセンブリと型を読み込むためのコードを書くことができますか?

どのように解決するのですか?

一般に、あなたは はしてはいけません。 もしある型が internal とマークされたなら、それはアセンブリの外からそれを使うことを意図していないことを意味します。それは、後のバージョンで削除されたり、変更されたりする可能性があります。

しかし、リフレクション を取るオーバーロードを探せば、公開されていない型やメンバーにアクセスすることができます。 BindingFlags 引数を取るオーバーロードを探し、そのオーバーロードに BindingFlags.NonPublic を渡すフラグに含めてください。

がある場合は 完全修飾された の名前 (アセンブリ情報を含む) がある場合、単に Type.GetType(string) を呼び出すだけで動作するはずです。もし、アセンブリがあらかじめわかっていて、そのアセンブリの中のパブリックな型がわかっている場合は typeof(TheOtherType).Assembly を使ってアセンブリの参照を取得する方が一般的には簡単で、その後に Assembly.GetType(string) .