1

署名が である型の具体的な型を見つけるにはどうすればよいIEnumerable<Func<ITab>>ですか?

私のコンストラクターは、遅延読み込みを実行するために前述の型を取ります。基本的に、起動時間を短縮するために、必要なときにのみタブをロードします。ただし、それぞれの具体的なTab実装は、タブ名を示す属性によって装飾されています。リストをループしているので、属性値を取得するためにデリゲートの具象型を取得したいと思います。

は承知し.GetType().GetMethod("Invoke").ReturnTypeていますが、それは を返しますITab。を呼び出すことによってのみ具象型を見つけることができるようですInvoke()

各具象型に関連する情報にアクセスしながら、デリゲートを使用して遅延読み込みを実現するより良い方法はありますか?

4

2 に答える 2

3

タブを返すメソッドを実際に呼び出す前に、タブのタイプを知る必要があるのはなぜですか?返されたときはGetType()、属性を使用して見つけることができます。関数の1つが異なる実装を返す可能性がある場合はどうなりますITabか?特に、データベースやxmlなどの外部ソースから適切なものが選択される場合。そのデリゲートを呼び出す必要があります。

于 2013-01-29T16:49:27.070 に答える
2

一般的に、2 つの問題を組み合わせて混同しているようです。1 つはタブに関する(メタ) データであり、もう 1 つはタブの読み込み時間の最適化です。今すぐメタデータが必要で、後でタブのコンテンツが必要な場合は、それらを分割する必要があります。

つまり、return ではなくIEnumerable<Func<ITab>>、次のようなものを返します。1) すぐに必要なタブに関する情報、および 2) タブの実際のコンテンツをロードするために後で呼び出されるデリゲート。IEnumerable<ITabInfo>ITabInfo

「将来の呼び出しでメソッドが返す型」を取得する方法はありません。それは水晶玉に相当します (想像してみてくださいreturn random.Next(2) == 0 ? (ITab)new TabTypeA() : (ITab)new TabTypeB();)。

于 2013-01-29T17:07:42.833 に答える