In Visual Studio kann ich mit der rechten Maustaste auf eine Schnittstelle klicken und entweder Schnittstelle implementieren oder Schnittstelle explizit implementieren.
public class Test : ITest
{
public string Id // Generated by Implement Interface
{
get { throw new NotImplementedException(); }
}
string ITest.Id // Generated by Implement Interface Explicitly
{
get { throw new NotImplementedException(); }
}
}
Der einzige Unterschied besteht darin, dass der Schnittstellenname zu den Schnittstelleneigenschaften und -methoden hinzugefügt wird, wenn Sie die Option zum expliziten Implementieren der Schnittstelle auswählen.
Ich finde, es macht den Code ein bisschen lesbarer, da ich sehen kann, woher diese Methode / Eigenschaft kommt. Aber macht dies einen Unterschied in der Verwendung oder Kompilierung der Klasse? Und ist es wirklich wichtig, ob ich meine Schnittstellen implizit oder explizit implementiere?
Es gibt auch einen Unterschied darin, wie Sie die Methode aufrufen.
Wenn Sie eine explizite Schnittstellenimplementierung verwenden, müssen Sie den Schnittstellentyp verwenden, um diese bestimmte Implementierung aufzurufen.
Wenn Sie also Code aufrufen, müssen Sie eine Variable vom Typ verwenden,
ITest
um darauf zuzugreifenITest.Id
.Der Artikel Explizite Schnittstellenimplementierung (C # -Programmierhandbuch) auf MSDN enthält ein gutes Beispiel.
quelle
Sie können zwei Schnittstellen implementieren, die dieselbe Methode definieren. Wenn Sie die Schnittstelle jedoch explizit implementieren, kann auf die Methoden nur zugegriffen werden, wenn die Variable in diese explizite Schnittstelle eingegeben wird.
Siehe: Tutorial zur expliziten Schnittstellenimplementierung
quelle
BEARBEITEN:
Es sollte keinen Unterschied machenSie sollten es nicht tun, es sei denn, Ihre Klasse implementiert zwei Schnittstellen mit den gleichen Eigenschaften, da Sie auf die entsprechende Schnittstelle umwandeln müssen, bevor Sie auf das Mitglied zugreifen können:Die Beispielverwendung gilt, wenn Sie explizit ein Schnittstellenmitglied implementieren, auch wenn Sie nur eine einzige Schnittstelle verwenden (was ich immer vergesse: S). Daher würde ich versuchen, die explizite Implementierung nach Möglichkeit zu vermeiden, da Klassenmitglieder ausgeblendet werden, wenn sie Es wird nicht auf die richtige Schnittstelle geworfen (was ziemlich verwirrend ist).
quelle
Basierend auf der Antwort von Jalayan,
quelle