Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Implementation eines Interfaces in Generischer Klasse
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

Themenstarter:

Implementation eines Interfaces in Generischer Klasse

beantworten | zitieren | melden

Hallo zusammen.

dachte eigentlich ich wäre Fit in Generics..

aber warum funktioniert das nicht :


public interface IControlRenderer
{		
     LabelControl Control { get; }
}

public abstract class ControlRenderBase<TLabelControl> :DrawingVisual,IControlRenderer where TLabelControl : LabelControl
{
     public TLabelControl Control { get; set; }
}

Fehler
'DrawingVisualSample.ControlRenderBase<TLabelControl>' does not implement interface member 'DrawingVisualSample.IControlRenderer.Control'. 'DrawingVisualSample.ControlRenderBase<TLabelControl>.Control' cannot implement 'DrawingVisualSample.IControlRenderer.Control' because it does not have the matching return type of 'LabelDesigner.LabelControl'.

Hat es doch! Grml.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von unconnected am .
private Nachricht | Beiträge des Benutzers
DerKleineTomy
myCSharp.de - Member



Dabei seit:
Beiträge: 106

beantworten | zitieren | melden

Der Rückgabetyp der Property muss exakt mit der im Interface deklarierten Property übereinstimmen. Implementier einfach das Interface explizit wie folgt:


public interface IControlRenderer
{
     LabelControl Control { get; }
}

public abstract class ControlRenderBase<TLabelControl> :DrawingVisual,IControlRenderer where TLabelControl : LabelControl
{
     public TLabelControl Control { get; set; }

     LabelControl IControlRenderer.Control 
     {
         get { return this.Control; } // this.Control gibt den Wert der oben definierten Property zurück
     }
}

Auf diese Weise hast du die generische Property, wenn du über die Klasse selbst zugreifst und die nicht-generische Property, wenn du über das Interface zugreifst.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von DerKleineTomy am .
private Nachricht | Beiträge des Benutzers
unconnected
myCSharp.de - Member

Avatar #avatar-3200.jpg


Dabei seit:
Beiträge: 862
Herkunft: Oerlinghausen/NRW

Themenstarter:

beantworten | zitieren | melden

Ja, Du hast recht, der Kaffee hat noch nicht gewirkt.

Das kann nicht funktionieren weil ich ja als TypArgument von ControlRenderBase auch alle Ableitungen von LabelControl benutzen kann, was dann aber nicht mehr dem Interface entspräche.

Danke.
private Nachricht | Beiträge des Benutzers