Visual Studio 2019 08.10.2019, 17:13 Uhr

Keine Fehlermeldung bei nicht implementierten Interface-Methoden

Visual Studio meckert unter bestimmten Umständen ein nicht implementiertes Interface nicht an.
(Quelle: dotnetpro)
Unter Visual Studio 2017 respektive .NET Framework 4.6.1 beziehungsweise C# 7 definiert man die Signatur einer Methode so:
interface IMyInterface
{
  void DoSomething ();
}
Eine Klasse, die von diesem Interface ableitet, muss die Methode dann implementieren. Also:
class MyClass : IMyInterface
{
  void DoSomething(){}
}
Wehe, die Implementierung wird vergessen. Dann unterringelt Visual Studio den Namen des Interfaces sofort Rot: Die Methode wurde nicht mit Leben gefüllt. "XYZ" implementiert den Schnittstellenmember "IMyInterface.DoSomething()" nicht, lautet die Fehlermeldung.
Versucht man dasselbe unter Visual Studio 2019 respektive .NET Core 3 beziehungsweise C# 8, meckert Visual Studio die fehlende Implementierung nicht an – wenn die Methode im Interface nicht nur als Signatur eingetragen ist. C# 8 bietet die Möglichkeit, im Interface einer Methodensignatur eine Standardimplementierung nachzustellen. Obiges Interface könnte unter C# 8 auch so aussehen:
interface IMyInterface
{
  void DoSomething()
  {
    Console.WriteLine("Hallo C#8");
  }
}
Die Klasse, die von IMyInterface ableitet, muss nun die Methode DoSomething() nicht implementieren.
class MyClass : IMyInterface
{
}
ergibt keine Fehlermeldung. Das ist auch so gedacht, denn die Methode ist durch die Standardmethode im Interface schon implementiert. Allerdings fällt damit die Sicherheit weg, dass der Compiler erzwingt, die Methode explizit mit Code zu füllen.
Das wird besonders perfide, wenn man das Interface in guter alter Klassen-Manier runterschreibt:
interface IMyInterface
{
  void DoSomething() { }
}
Das ist absolut legaler Code und der Compiler freut sich ob der Fehlerlosigkeit. Die Klasse MyClass leitet von IMyInterface ab, die Methode taucht darin aber nicht explizit auf. Trotzdem kann man sie in der Klasse aufrufen, nur – es passiert dann nichts. Freilich ist das alles so gewollt und auch logisch. Aber der Autor dieser Zeilen weiß aus eigener leidvoller Erfahrung, dass das zu einer länglichen Fehlersuche führen kann. Merke deshalb: Standardmethoden in Interfaces sollte man äußerst zurückhaltend dosieren.


Das könnte Sie auch interessieren