Ich wollte im Grunde dies tun:Wie erben Sie von einem generischen Parameter?
class UILockable<T> : T
where T : UIWidget
{
}
Dies ist jedoch nicht funktioniert. Ich habe Leute gesehen empfehlen, dass Sie dies tun:
class UILockable<T>
where T : UIWidget
{
private T _base;
}
Das würde mich fordern, dass jede Funktion UILockable außer Kraft setzen würde es T. brauchen und uns darauf, dieses nicht möglich ist, da T von UIWidget ableiten können und haben einzigartige abstrakte/virtual eigene Methoden.
Gibt es keine Möglichkeit, einfach von T zu erben?
Erwägen Sie, den generischen Typ zum Implementieren einer bestimmten Schnittstelle zu erzwingen. Sie können nicht wissen, welcher genaue Typ T ist, und wenn Sie nach bestimmten Methoden suchen, die ein T haben kann oder nicht, wird es nicht funktionieren. Machen Sie alle diese Objekte so, dass sie ILockable implementieren, was diese Methoden wie einen Vertrag erzwingt. – drharris
Wenn Sie geschützte Methoden nicht außer Kraft setzen müssen, um Ihre Sperrlogik zu erreichen, können Sie dies mithilfe eines Sperrdienstobjekts neu gestalten, das UIWidget-Instanzen mit LockContext-Objekten verknüpft, die für Ihre Sperrlogik verwendet werden. Ich glaube nicht, dass die Vererbung eine gute konzeptionelle Lösung für das ist, was Sie versuchen zu tun, da Sie versuchen, die Funktionalität allgemein zu erweitern, nicht eine konkrete "ist-eine" -Beziehung auszudrücken. –
möglich Duplikat von [Vererbung auf einem eingeschränkten generischen Typparameter] (http://stackoverflow.com/questions/1420581/inheritance-on-a-constrained-generic-type-parameter) – joce