2

基本クラス「ポート」から継承するクラスがたくさんあります

「ポート」から継承するすべてのクラスのすべてのパブリック メソッドを取得する方法を知っている人はいますか

GetMethods メソッドを呼び出す必要があることはわかっていますが、これを型から呼び出します。

Port から継承するすべてのクラスのリストを何らかの方法で取得できれば、次のようになります。

(ポートから継承するすべての型).SelectMany(x => x.GetMethods());

誰でもここで助けることができますか?

4

2 に答える 2

2

次のようなものを使用できます。

Assembly assembly = [get your assembly instance];
Type t = typeof(Port)
var methods = assembly.GetTypes()
                 .Where(p => t.IsAssignableFrom(p))
                 .SelectMany(x => x.GetMethods());
于 2013-02-07T22:05:38.047 に答える
2

さて、これらが同じアセンブリにあることがわかりました。

var methods = from type in typeof(Port).Assembly.GetTypes()
              where typeof(Port).IsAssignableFrom(type)
              from method in type.GetMethods()
              select method;

別名

var methods = typeof(Port).Assembly.GetTypes()
                          .Where(type => typeof(Port).IsAssignableFrom(type))
                          .SelectMany(type => type.GetMethods());

取得するタイプのリストにそれ自体含まれることに注意してください。Port

同じメソッドを何度も取得するのを避けるために使用BindingFlags.DeclaredOnlyしたい場合があります - それは後でそれらをどうしようとしているかによって異なります。

于 2013-02-07T22:05:38.650 に答える