Laden...

Property-Name "in" dem ein Punkt (".") vorkommt [=> interface-explizite Implementierung d. Property]

Erstellt von CoderboyPB vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.471 Views
Thema geschlossen
C
CoderboyPB Themenstarter:in
327 Beiträge seit 2008
vor 10 Jahren
Property-Name "in" dem ein Punkt (".") vorkommt [=> interface-explizite Implementierung d. Property]

Hallo, es geht um folgendes Video:

MVVM Session 03 - Model Validation with IDataErrorInfo

Und zwar bei 4:20, schreibt er folgende Property:


public string IDataErrorInfo.Error
{
   get
   {
       ....
    }
}

Ich erkenne wohl IDataErrorInfo als eine Schnittstelle und Error als Property, aber ich habe noch nie einen Datentypen als Property Namen gesehen ...

Was hat es damit auf sich?

1.346 Beiträge seit 2008
vor 10 Jahren

So werden interfaces Explizit implementiert. Die Properties tauchen dann nur auf wenn auch das interface gecastet wird. Das ist z.B. auch wichtig bei IEnumerable. Es gibt die interfaces IEnumerator und IEnumerator<T>. Beide fordern ein Property Current. Bei dem generischen Typ ist es vom Typ T. Bei IEnumerable vom Typ object. Das beißt sich also. Also musst du eine Implementierung explizit angeben. Sieht dann also so aus:


public T Current {get{...}}
public object IEnumerator.Current {get{...}}

LG pdelvo

D
216 Beiträge seit 2009
vor 10 Jahren

Das nennt sich explizite Implementierung.

2.207 Beiträge seit 2011
vor 10 Jahren

Hallo CoderboyPB,

das ist die explizite Implementierung von einem Interface. Damit sagst du, dass ein Property/eine Methode (oder was auch immer vom Interface angeboten wird) absolut nur über das Interface angesprochen werden kann.

Sonst könnte man "versehentlich" auch über die Implementierung darauf zugreifen. Das ist mit der expliziten implementierung nicht möglich.

Gruss

Coffeebean

=== EDIT: Zu spät. Ich lass es mal stehen 😉

Hinweis von herbivore vor 10 Jahren

Wenn man ein gutes C# Grundlagenbuch durchgearbeitet hat, müsste man die Syntax für interface-explizite Implementierung kennen, siehe [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

Natürlich besteht bei Features, die nicht so häufig gebraucht werden, immer die Gefahr, dass sie beim Grundlagenstudium zur Kenntnis genommen hat, aber dann wieder vergisst, eben weil man sie nie verwenden muss und auch in fremden Code - lange Zeit - nicht darauf stößt.

Und ich gebe zu, dass es schwierig ist, danach zu suchen, wenn das einzige gleichbleibende Syntax-Element ein Punkt ist. Man bräuchte für die Suche eigentlich das Stichwort "interface-explizite Implementierung" und wenn man das hat, braucht man eigentlich nicht mehr suchen. Klassischer Fall, bei dem eine (unabsichtliche) Missachtung von Punkt 1.1.1 aber nicht von Punkt 1.1 vorliegt.

Das alles ändert aber nichts, dass es nach der unserer Definition objektiv Grundlagen sind, warum auch immer man diese als Fortgeschrittener oder Experte gerade nicht parat hatte. Solange solche Fälle ausnahmsweise auftreten, passiert auch nicht mehr, als das der Thread nach der Beantwortung geschlossen wird.

Thema geschlossen