我有類似下面的方法:C#通行證泛型在運行時
public IEnumerable<T> GetControls<T>()
: where T : ControlBase
{
// removed.
}
然後,我創建了一個類:
public class HandleBase<TOwner> : ControlBase
: TOwner
{
// Removed
}
我希望能夠調用
GetControls<HandleBase<this.GetType()>>;
它將使用該類的類型傳遞給HandleBase。這基本上會得到所有擁有這種類型的HandleBase。
我該如何做到這一點?
編輯:
我使用.NET 2.0解決方案,所以大於2.0將無法正常工作。
這個想法是讓ControlBase擁有其他ControlBase for「children」的集合。然後他們可以根據他們的類型與GetControls<T>()
查詢。例如,這可以讓我得到一個Shape的所有HandleBase。然後,我可以採取所有這些,並設置Visible = false或與他們一起做其他事情。因此,我可以操縱特定類型的兒童進行收藏。
HandleBase<TOwner>
需要陶納,因爲它具有與「擁有類型」的引用。所以你只能添加任何將HandleBase擴展到Shape的東西。合理?
感謝您的幫助!
@TheCloudlessSky,爲什麼調用'this.GetType()'?如果你正在調用'GetControls>();'從一個基於實例的類[如'this'指示],爲什麼不簡單地使用實現類的聲明類型名?如果這是一個基類,則有將子類的類型暴露給基類的方法。 –
2010-04-09 14:46:33
請參閱上面的修改。 – TheCloudlessSky 2010-04-09 16:07:41