Laden...

Verständnisproblem Interfaces und Delegates

Erstellt von SvenH vor 18 Jahren Letzter Beitrag vor 18 Jahren 2.441 Views
S
SvenH Themenstarter:in
51 Beiträge seit 2005
vor 18 Jahren
Verständnisproblem Interfaces und Delegates

Hallo,
ich frage mich, wozu ich Interfaces und Delegates als Funktionskopf außerhalb der Klassen deklariere.
Man kann doch die Methoden vollständig in den Klassen implementieren.
Und was ist der Unterschied der beiden? Beide werden doch als Funktionskopf deklariert und in der Klasse dann vollständig implementiert. Also wieso haben sie nicht den gleichen Methodennamen?
Mir fehlt hier das Verständnis und hoffe das ihr mir da etwas weiter helfen könntet.

In meiner Entwicklungsumgebung Visual Studio .NET 2002 kann ich über Projekt --> Klasse hinzufügen
eine Klasse hinzufügen. Gibt es in der Entwicklungsumgebung eine Möglichkeit, Interfaces und Delegates hinzuzufügen?

MfG
Sven

T
55 Beiträge seit 2005
vor 18 Jahren

Hallo SvenH,

um in Klassen Gemeinsamkeiten zu schaffen kann man Interfaces nutzen. D. h. man kann auf Klassen die das Interface implementieren über die gleichen Methode zugreifen.

Sicher kann man auch in jeder Klasse die Methoden deklarieren, jedoch können dabei mal schnell eine vergessen oder falsch geschrieben sein. Das ist bei Interfaces nicht möglich.

Kurzgesagt Interfaces dienen dazu um möglichst einfach vorher definierte Methoden in Klassen bereit zustellen. Stichwort Klassenschnittstellen.

Gruß tzun

Gott gab uns die Nüsse - knacken müssen wir sie.

S
SvenH Themenstarter:in
51 Beiträge seit 2005
vor 18 Jahren

Hallo tzun,
das ist erstmal verständlich, nur sehe ich noch nicht die unbedingte Notwendigkeit, das Interface deshalb auszulagern.
Die daraus resultierenden Vorteile finde ich nicht so gravierend.
Aber wenn es allgemein so üblich ist will ich mich nicht dagegen versperren 🙂

MfG
Sven

4.221 Beiträge seit 2005
vor 18 Jahren

Original von SvenH
Hallo tzun,
das ist erstmal verständlich, nur sehe ich noch nicht die unbedingte Notwendigkeit, das Interface deshalb auszulagern.
Die daraus resultierenden Vorteile finde ich nicht so gravierend.
Aber wenn es allgemein so üblich ist will ich mich nicht dagegen versperren 🙂

MfG
Sven

Mal angenommen Du hast 10 total verschiedene Klassen (3 Components / 5 Controls / 2 native Datenklassen)..... diese haben alle eine Methode SaveStateToDisk()....

Wenn Du nun ein Interface schreibst IPersistentData mit der Methode SaveStateToDisk() und dieses in allen Klassen implementierst, dann kannst Du nachher z.B: durch alle Objekte iterieren und die Interface-Methode auslösen...

//Pseudocode:

foreach (Control ctrl in this.Controls)
{
IPersistentData ipd=ctrl as IPersistentData;
if (ipd!=null)
{
ipd.SaveStateToDisk;
}
}

foreach (IComponent comp in this.components)
IPersistentData ipd=comp as IPersistentData;
if (ipd!=null)
{
ipd.SaveStateToDisk;
}
}

Du kannst dann alle objekte so saven indem Du diese nicht als objekt sondern als Interface (über das Interface) ansprichst.

Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...

S
8.746 Beiträge seit 2005
vor 18 Jahren

Ein Interface ist so eine Art Mehrfachvererbung für Arme... 🙂

Kleiner Scherz. Interface machen nur Sinn wenn mehrere Klassen sie implementieren. Deshalb müssen sie natürlich OFFEN sein, ein privates Interface ist sinnlos. Gleiches gilt für Delegaten, da es hier immer einen gibt, der den Delegaten anbietet und derjenige der ihn nutzt. Der braucht den Delegatentypen um seine Methode anbieten zu können.