2011-10-27 24 views
1

これを正確に説明する方法はわかりませんが、とにかく行く予定です。汎用クラスのループスルー子クラス

ジェネリック型を渡す必要がある基本ユーザーコントロールがあります。

public abstract class BaseControl<T> : UserControl where T : BaseClass, new() 
{ 

} 

Base Controlの目的は、BaseClassの子のプロパティを編集することです。

は、その後、私は "MyClassのは、" BaseClassのを次

public partial class MyControl : BaseControl<MyClass> 
{ 
} 

に似たコントロールのカップルを継承しているしています。

私は、MyControlなどをページに使用するのと似ていると言うことができます。 BaseClassから継承しているすべてのコントロールを取得するために、次のようなことをすることはできますか?簡単

foreach(BaseControl<T> c in this.Controls) 
{ 
    //do stuff 
} 

答えて

3

ないひどく。あなたが非でTが依存していない任意のメンバーを入れることができ、その後

public abstract class BaseControl : UserControl {} 

public abstract class BaseControl<T> : BaseControl where T : BaseClass, new() 

foreach(BaseControl c in this.Controls.OfType<BaseControl>()) 
{ 
    //do stuff 
} 

:あなたはBaseControl<T>から継承された非ジェネリックBaseControlを持っていた場合、それが簡単になりますジェネリッククラスも。

それはさておき、あなた各コントロールの型階層を調べ、それらのいずれかがBaseControl<T>のジェネリックか非ジェネリック型のいずれかを使用するかどうか、それはこれよりやや乱雑になる可能性があります。

+0

ありがとうございます:) –