2011-10-27 78 views
1

我不知道如何解釋這個確切的,但我會有一個去。循環通過泛型類的兒童類

我有一個基本的用戶控件,需要通過一個泛型類型。

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

} 

基本控制的目的是編輯BaseClass的子項的屬性。

然後,我有類似以下

public partial class MyControl : BaseControl<MyClass> 
{ 
} 

一對夫婦的控制 「MyClass的」 爲繼承BaseClass的。

因此,讓我們說我有MyControl和其他類似於它在頁面中使用。 我可以做類似以下的事情來獲得所有繼承自BaseClass的控件嗎?

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

回答

3

非常容易。

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 
} 

你可以把它沒有依賴於任何成員T在非:如果你有這BaseControl<T>繼承自一個非通用BaseControl它會更簡單泛型類也是如此。

除此之外,你可以檢查每個控件的類型層次,看看是否有任何使用任何一種BaseControl<T>通用或非通用的形式,但它會比這個有些混亂。

+0

非常感謝:) –