Die explizite Schnittstellenimplementierung ist eine Art Zwischenstation zwischen öffentlich und privat: Sie ist öffentlich, wenn man eine schnittstellentypische Referenz verwendet, um auf sie zuzugreifen, aber das ist die nur zugreifen können (sogar in derselben Klasse).
Wenn Sie eine implizite Schnittstellenimplementierung verwenden, müssen Sie sie als öffentlich angeben, da sie es eine öffentliche Methode, die Sie aufgrund der Tatsache, dass sie in der Schnittstelle enthalten ist, außer Kraft setzen. Mit anderen Worten, der gültige Code ist:
public class Foo : IBar
{
// Implicit implementation
public string GetQueryString()
{
///...
}
// Explicit implementation - no access modifier is allowed
string IBar.GetQueryString()
{
///...
}
}
Ich persönlich verwende selten eine explizite Schnittstellenimplementierung, es sei denn, sie ist erforderlich für Dinge wie IEnumerable<T>
die unterschiedliche Signaturen für GetEnumerator
je nachdem, ob es sich um die generische oder nicht-generische Schnittstelle handelt:
public class Foo : IEnumerable<string>
{
public IEnumerator<string> GetEnumerator()
{
...
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator(); // Call to the generic version
}
}
Hier können Sie haben eine explizite Schnittstellenimplementierung zu verwenden, um eine Überladung aufgrund des Rückgabetyps zu vermeiden.