D Programmierung - Schnittstellen

Eine Schnittstelle ist eine Möglichkeit, die von ihr geerbten Klassen zu zwingen, bestimmte Funktionen oder Variablen zu implementieren. Funktionen dürfen nicht in einer Schnittstelle implementiert werden, da sie immer in den Klassen implementiert sind, die von der Schnittstelle erben.

Eine Schnittstelle wird mit dem Schlüsselwort interface anstelle des Schlüsselworts class erstellt, obwohl sich die beiden in vielerlei Hinsicht ähneln. Wenn Sie von einer Schnittstelle erben möchten und die Klasse bereits von einer anderen Klasse erbt, müssen Sie den Namen der Klasse und den Namen der Schnittstelle durch ein Komma trennen.

Schauen wir uns ein einfaches Beispiel an, das die Verwendung einer Schnittstelle erklärt.

Beispiel

import std.stdio;

// Base class
interface Shape {
   public: 
      void setWidth(int w);
      void setHeight(int h);
}

// Derived class
class Rectangle: Shape {
   int width;
   int height;
   
   public:
      void setWidth(int w) {
         width = w;
      }
      void setHeight(int h) {
         height = h; 
      }
      int getArea() {
         return (width * height);
      }
}

void main() {
   Rectangle Rect = new Rectangle();
   Rect.setWidth(5);
   Rect.setHeight(7);

   // Print the area of the object.
   writeln("Total area: ", Rect.getArea());
}

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

Total area: 35

Schnittstelle mit endgültigen und statischen Funktionen in D.

Eine Schnittstelle kann eine endgültige und statische Methode haben, für die Definitionen in die Schnittstelle selbst aufgenommen werden sollen. Diese Funktionen können von der abgeleiteten Klasse nicht überschrieben werden. Ein einfaches Beispiel ist unten gezeigt.

Beispiel

import std.stdio;

// Base class
interface Shape {
   public:
      void setWidth(int w);
      void setHeight(int h);
      
      static void myfunction1() {
         writeln("This is a static method");
      }
      final void myfunction2() {
         writeln("This is a final method");
      }
}

// Derived class
class Rectangle: Shape {
   int width;
   int height; 
   
   public:
      void setWidth(int w) {
         width = w;
      }
      void setHeight(int h) {
         height = h;
      }
      int getArea() {
         return (width * height);
      }
}

void main() {
   Rectangle rect = new Rectangle();

   rect.setWidth(5);
   rect.setHeight(7);
   
   // Print the area of the object.
   writeln("Total area: ", rect.getArea());
   rect.myfunction1();
   rect.myfunction2();
}

Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:

Total area: 35 
This is a static method 
This is a final method