mam sposób jak następuje:C# Pass rodzajowych przy starcie
public IEnumerable<T> GetControls<T>()
: where T : ControlBase
{
// removed.
}
Potem stworzył klasę:
public class HandleBase<TOwner> : ControlBase
: TOwner
{
// Removed
}
Chciałbym móc wywoływać
GetControls<HandleBase<this.GetType()>>;
gdzie będzie używał typu THIS, aby przejść do HandleBase. Zasadniczo uzyskałoby to całą HandleBase, która ma właściciela tego typu.
Jak mogę to osiągnąć?
EDIT:
Używam .NET 2.0, tak rozwiązania większa niż 2,0 nie będą działać.
Chodzi o to, aby ControlBase miał kolekcję innych ControlBase dla "dzieci". Następnie mogą być zapytani na podstawie ich typu z GetControls<T>()
. To pozwoliłoby mi na przykład uzyskać całą HandleBase dla kształtu. Wtedy mogę wziąć wszystkie te i ustawić Visible = false lub zrobić coś innego z nimi. W ten sposób mogę manipulować dziećmi określonego typu dla kolekcji.
HandleBase<TOwner>
wymaga TOwnera, ponieważ ma odniesienie do "rodzaju posiadania". Możesz więc dodać tylko coś, co rozszerza HandleBase na kształt. Ma sens?
Dzięki za pomoc!
@TheCloudlessSky, dlaczego wywołać 'this.GetType()'? jeśli wywołujesz 'GetControls>();' z klasy opartej na instancji [jak "this" wskazuje], dlaczego nie po prostu użyć deklarowanej nazwy typu klasy implementującej? jeśli jest to klasa podstawowa, istnieją sposoby ujawnienia typu podklasy klasie bazowej. –
Patrz edycja powyżej. – TheCloudlessSky