Ja w zasadzie chcąc to zrobić:Jak dziedziczyć po parametrze generycznym?
class UILockable<T> : T
where T : UIWidget
{
}
Jednak to nie działa. Widziałem ludzi, zaleca się to zrobić:
class UILockable<T>
where T : UIWidget
{
private T _base;
}
Wymagałoby to mnie zastąpić każdy UILockable funkcja musiałaby i przekazuje go do T. Jest to niemożliwe, ponieważ T może pochodzić od UIWidget i mają unikalne abstrakcyjne/wirtualnego własne metody.
Czy nie można po prostu odziedziczyć po T?
Zastanów się, czy wymusić typ ogólny, aby zaimplementować określony interfejs. Nie wiesz, jaki jest dokładny typ T, a jeśli szukasz konkretnych metod, które T ma lub może nie mieć, to nie zadziała. Spraw, aby wszystkie takie obiekty wprowadzały ILockable, które wymusza takie metody, jak kontrakt. – drharris
Jeśli nie ma potrzeby zastępowania metod chronionych w celu uzyskania logiki blokowania, można przeprojektować to za pomocą obiektu usługi blokowania, który łączy instancje UIWidget z obiektami LockContext używanymi w logice blokowania. Nie sądzę, że dziedziczenie to dobre pojęciowe dopasowanie do tego, co próbujesz zrobić, ponieważ starasz się ogólnie zwiększyć funkcjonalność, a nie wyrażać konkretnej relacji "jest-a". –
możliwy duplikat [Dziedziczenia z ograniczonym typowym parametrem typu] (http://stackoverflow.com/questions/1420581/inheritance-on-a-constrained-generic-type-parameter) – joce