Skip to content

Warum muss eine abstrakte Klasse in C# alle Methoden einer Schnittstelle implementieren?

Ein Kommilitone von mir, der sonst hauptsächlich im Java-Umfeld programmiert, stellte mir heute die Frage, warum er folgendes in C# nicht machen kann:

C#:
  1. interface IInterface
  2.     {
  3.         void Method();
  4.     }
  5.  
  6.     abstract class Base : IInterface
  7.     {
  8.     }

Folgendes funktioniert nämlich in Java problemlos:

JAVA:
  1. interface IInterface
  2.     {
  3.     void Method();
  4.     }
  5.  
  6.     abstract class Base implements IInterface
  7.     {
  8.     }

Wir haben eine Weile darüber diskutiert, konnten aber keine sinnvolle Erklärung finden, warum dieses Konstrukt in C# nicht möglich ist. Warum muss eine abstrakte Klasse alle Methoden einer Schnittstelle implementieren?
Aus unserer Sicht hat es macht das keinen Sinn, vor allem nicht, wenn die abstrakte Klasse nur einige der Methoden der Schnittstelle implementieren soll:

C#:
  1. interface IInterface
  2.     {
  3.         void Method();
  4.         void AnotherMethod();
  5.     }
  6.  
  7.     abstract class Base : IInterface {
  8.         public void Method()
  9.         {
  10.         }
  11.     }

Wenn jemand eine Antwort für uns hat, her damit!

Categories: Programming.

Tags: , ,

Comment Feed

3 Responses

  1. ganz einfach: das Interface gibt in einem standardisierten Gerüst vor, über welche Methoden eine Klasse / ein Objekt kommunizieren können MUSS, damit eine bestimmte Sicherheit zum Umgang mit dem Objekt/ der Klasse vorhanden ist.

    mE. macht die Implementierung in Java keinen Sinn, da mit einer nicht-implementierung der Methoden die Funktion der Schnittstellen ad absurdum geführt wird.

    Ein Interface ist dabei prizipiell als "Zertifiziert nach Standard xy" zu verstehen und im Prinzip musst Du dabei dann alle Vorraussetzungen, die ein Zertifikat nach Standard xy vorraussetzt, erfüllen. Und dazu zwingt dich die Prüfung von C#.

  2. Überzeugt bin ich davon noch nicht wirklich. Schließlich ergbit sich die "Funktion der Schnittstelle" erst, wenn ich auch ein Objekt instanziert habe.
    Da man eine abstrakte Klasse nicht instanzieren kann, sehe ich auch keinen Grund dafür, aus dem diese abstrakte Klasse alle Voraussetzungen erfüllen sollte. Es handelt sich dabei ja nicht um ein "Zertifikat" sondern eher um eine Art Vorlage für ein "Zertifikat" (um bei deiner Terminologie zu bleiben).

  3. Hallo,

    ich würde sagen in c# könntet ihr in der abstract class Base die Methode(n) des Interfaces als abstrakt deklarieren. Die Methoden muss dann von den abgeleiteten Klassen (die man instanzieren kann) implementiert werden. Wofür man dann noch die Schnittstellendefinition braucht frag ich mich :) Da es nur ein mehr an Pflegeaufwand verursacht. Grüße

    furtelApril 8, 2008 @ 8:56 am



Some HTML is OK

or, reply to this post via trackback.