Autor Beitrag
Leuchtturm
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: So 30.09.07 17:54 
Hi,
in .net gibt es ja Interfaces. Mir erschließt sich aber weder die Funktionsweise noch der Sinn von einem Interface. Für was sind die sinnvoll :?:
Leuchtturm

PS:Falls ich in der falschen Sparte gepostet habe tut es mir leid
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: So 30.09.07 18:19 
Hallo!

Interfaces geben Dir die Möglichkeit, von einem Objekt bestimme Methoden und Eigenschaften zu "fordern", ohne es auf einen bestimmten Typ festzulegen. Das macht Interfaces extrem flexibel.

Nehmen wir eine generische List, die sortierbar sein soll:

ausblenden Chrome-Quelltext
1:
2:
3:
4:
5:
6:
type
  MyList<T> = public class
    where T is IComparable;
  public
    method Sort;
  end;


Ich habe hier nur gefordert, dass T das Interface IComparable implementiert, damit jedes Element die CompareTo-Methode besitzt und ich sortieren kann. Es ist hier also egal, von welcher Klasse die Elemente sind, solange sie nur IComparable implementiert. Damit ist eine solche Klasse viel flexibler und an viel mehr Stellen einsetzbar, als wenn ich eine bestimmte Mutterklasse vorschreiben würde.

Interfaces sind aber auch ein weiteres Mittel der Kapselung. Ich kann z.B. so etwas machen:
ausblenden Chrome-Quelltext
1:
2:
3:
4:
5:
6:
type
  MyList<T> = public class
    where T is IComparable;
  public
    method GetSortedValues : IEnumerable<T>;
  end;

Hier sage ich nur, dass GetSortedValues eine Sequenz von Werten zurückgibt. Ich sage nichts, wie diese Sequenz implentiert ist. Das kann ein Array sein oder eine Liste. Ich "verrate" also noch weniger über die interne Implementation, was die Kapselung vergrößert.

Ein Vorteil von Interfaces ist auch, dass eine Klasse beliebig viele Interfaces implementieren kann. Das kann man sehr schön bei Plugins verwenden. Man kann verschiedene Interfaces zur Verfügung stellen, welche eine Plugin-Klasse implementieren kann, aber nicht muss. Und je nachdem, welche Interfaces eine Plugin-Klasse implementiert hat, wird sie an verschiedenen Stellen im Host-Programm "angsprochen".

Ich könnte noch Stunden lang über Interfaces schreiben, aber kurz gesagt: Sie sind unglaublich flexibel und insbesondere in Verbindung mit Generics Gold Wert.

Grüße
Christian

P.S.: Interfaces gibt's übrigens nicht nur in .NET ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Leuchtturm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1087

Win Vista, Knoppix, Ubuntu
Delphi 7 Pe, Turbo Delphi, C#(VS 2005 Express), (X)HTML + CSS, bald Assembler
BeitragVerfasst: So 30.09.07 18:22 
Danke für die ausführliche Antwort