オブジェクトの場合、リフレクションを使用してすべてのサブクラスを取得できますか?オブジェクトの場合、反射やその他の方法ですべてのサブクラスを取得できますか?
42
A
答えて
62
アセンブリ内のすべての型を読み込み、それらの型を列挙してオブジェクトの型を実装する型を確認できます。あなたは「オブジェクト」と言っていますので、以下のコードサンプルはインターフェイス用ではありません。オブジェクトがで宣言されたとしても、このコードサンプルは、同じアセンブリを検索します。
class A
{}
...
typeof(A).Assembly.GetTypes().Where(type => type.IsSubclassOf(typeof(A)));
やコメントで提案されているように、ロードされたアセンブリのすべてを検索するには、このコードサンプルを使用しています。
var subclasses =
from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.IsSubclassOf(typeof(A))
select type
両方のコードサンプルは、インタフェースを意味using System.Linq;
9
サブクラスを追加する必要が?はい:
this.GetType().GetInterfaces()
サブクラスは基本型を意味しますか?まあ、C#は1つの基本クラスしか持てません
サブクラスはあなたのクラスから継承するすべてのクラスを意味しますか?はい:
EDIT:(感謝vcsjones)
foreach(var asm in AppDomain.CurrentDomain.GetAssemblies())
{
foreach (var type in asm.GetTypes())
{
if (type.BaseType == this.GetType())
yield return type;
}
}
て、代わりにオブジェクト/クラスのインタフェースのための同じことを行うには、すべてのロードされたアセンブリの
+6
"サブクラスはインターフェースを意味する" - 申し訳ありませんが、これは意味をなさない – BartoszKP
関連する問題
- 1. Javaインターフェイスのすべてのフィールドを反射的に取得しますか?
- 2. Rails - メインクラス、サブクラス、サブクラスですべてのレコードを取得する方法
- 3. サブクラスの反射型エラー
- 4. 反射を使ってオブジェクトからarraylistサイズを取得する
- 5. PythonでLock()オブジェクトをサブクラス化することは可能ですか?そうでない場合、デッドロックをデバッグする他の方法はありますか?
- 6. プロジェクト内のすべてのパッケージを反射的に入手できますか?
- 7. joomlaでイメージ反射を取得する方法は?
- 8. ItemsControlやその他の戦術をサブクラス化していますか?
- 9. Clojureの警告-に反射し、I型反射に警告を取得しています、次のコードで
- 10. は反射によってkotlinパッケージを取得する方法
- 11. JSONオブジェクトの反射
- 12. アンドロイドアプリですべてのTwitterフォロワーリストとそのメールアドレスを取得できますか?
- 13. 動的反射、チェーン方法やラムダ式
- 14. 他のクラスのselfパラメータはどうやって取得できますか?
- 15. tweepy/Twitterの場所からすべてのつぶやきを取得:
- 16. すべてのモデルインスタンスでhas_manyオブジェクトをすべて取得する方法は?
- 17. 反射光を表すカラースケールを取得する方法
- 18. 反射とJavaポリゴンで他の変換
- 19. Scrapyやその他の簡単な方法でサードパーティのCookieをすべて取得するにはどうすればよいですか?
- 20. ReactDOMServer.renderToString()やその他の方法で、反応コンポーネントを文字列にレンダリングする必要がありますか?
- 21. 他のシリーズやデータから値を取得する方法
- 22. NSPoupupButtonのSwiftサブクラス、サブクラス内でのアクション(IBAction)の取得方法
- 23. Djangoの設定やその他の変数からリクエストパラメータを取得できますか?
- 24. プロダクションコードでBluetooth反射ハックを残すべきですか?
- 25. iOSのgoogle mpクラスタからオブジェクトや場所を取得する方法は?
- 26. アトリビュートから他のオブジェクトへのアクセスを取得する方法
- 27. 反射デコレータがオブジェクトのデータを保存/取得していません
- 28. サブクラスでmacwire注射剤を上書きする方法
- 29. 反射からの情報を得て
- 30. スーパークラスでインスタンス化されたオブジェクトのフィールドをサブクラスのサブクラスから取得する方法
ことを行い、 'にどこの行を変更ここでtypeof(IMyInterface).IsAssignableFrom(type)&& type.IsClass'([元の質問](http://stackoverflow.com/questions/26733/getting-all-types-that-implement-an-interface-with-c) -sharp-3-0))。 – jtpereyda