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?
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
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 😉
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck
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.