Entwickler-Ecke
Basistechnologien - Wozu Schnittstellen?
pepe-je - Sa 13.03.10 17:43
Titel: Wozu Schnittstellen?
Ich habe erst begonnen, mich mit C# zu befassen und komme über eine Unklarheit nicht hinweg. Wozu braucht man Schnittstellen? Ich habe ein Programm geschrieben, in dem eine Klasse eine Schnittstelle erbt. Die Schnittstelle umfaßt nur eine Methode und diese Methode wird in der Klasse implementiert. Es klappt einwandfrei. Nun entferne ich die Vererbung der Schnittstelle. Da die implementierte Methode noch da ist, läuft es immer noch einwandfrei. Nun verstehe ich nicht, wozu die Schnittstelle gut ist. Man kann ja die implementierte Methode auch ohne die Vererbung der Schnittstelle in die Klasse schreiben.
Sicher ist das eine naive Frage. Aber kann mir trotzdem jemand auf die Sprünge helfen?
Vielen Dank
pepe-je
danielf - Sa 13.03.10 18:17
Hallo,
allgemein hilft das
C# OpenBook [
http://openbook.galileocomputing.de/csharp]. Im Kapitel
10 [
http://openbook.galileocomputing.de/csharp/kap10.htm] findest du auch ein Kapitel über Interfaces/Schnittstellen.
Ich versuch es auch mal knapp zu formulieren:
Eine Schnittstelle gibt an, dass du eben eine/mehrere gewisse Methode(n) implementierst. Du kannst du Methoden auch so implementieren, aber dann wissen andere Klassen/ der Kompiler nicht, dass du genau diese Method implementiert hast. Sprich in dem du ein Interface implementierst zeigst du dass du gewisse Funktionen implementierst die ein gewisse Aufgaben ausführen.
Zum Beispiel willst du Daten speichern. Das Format ist dir dabei erstmal egal.
Du definierst die Daten in einer Klasse:
C#-Quelltext
1: 2: 3: 4: 5:
| class Person { public string Vorname { get; set; } public string Nachname { get; set; } } |
Jetzt machst du ein Interface, welches diese Klasse speichern soll:
C#-Quelltext
1: 2: 3: 4:
| interface IStorePerson { void StorePerson(Person p); } |
Und nun tust du konkrete Klasse implementieren die genau diese Aufgabe übernehmen (implementieren das Interface IStorePerson):
Xml
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| class XmlStore : IStorePerson { public XmlStore(string filename) { ... }
public void StorePerson(Person p) { } } |
CSV
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| class CvsStore : IStorePerson { public CvsStore(string filename) { ... }
public void StorePerson(Person p) { ... } } |
Und nun kannst bestimmten in welchem Format du die Person speichern willst:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Person p = new Person(); p.Nachname = "Mueller"; p.Vorname = "Mathias";
IPersonStore store = new XmlStore("blub.xml"); store.StorePerson(p);
store = new CvsStore("blub.txt"); store.StorePerson(p); |
Ich hoffe das hilf dir, ansonsten kannst dir ja das OpenBook anschauen oder nochmal fragen.
Gruß Daniel
pepe-je - So 14.03.10 12:28
Hallo, Daniel
Vielen Dabk für Deine Hilfe.
Peter
Oppi35 - Do 27.05.10 19:17
C#-Quelltext
1: 2: 3: 4:
| IPersonStore store = new XmlStore("blub.xml"); store.StorePerson(p); store = new CvsStore("blub.txt"); store.StorePerson(p); |
Hallo Zusammen,
ich verstehe hierbei folgendes nicht:
Warum wird die Variable store nicht wie folgt deklariert und initialisiert:
C#-Quelltext
1:
| XmlStore store = new XmlStore("blub.xml"); |
???
Es ist doch jetzt so, dass nur noch die Methoden und Eigenschaften aus IPersonStore zur Verfügung stehen und nicht mehr sämtliche Methoden u. Eigenschaften aus XmlStore. Aber das ist hier mal nebensächlich.
Ich habe diese Verwendung von Interfacevariablen schon häufiger gesehen, aber ich habe es bisher nicht verstanden.
Wo ist der Vorteil der Deklarierung als "Interfacevariable" anstelle des Objekttyps "XmlStore"?
Moderiert von
Christian S.: C#-Tags hinzugefügt
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!