Autor Beitrag
pepe-je
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: Sa 13.03.10 17:43 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Sa 13.03.10 18:17 
Hallo,

allgemein hilft das C# OpenBook. Im Kapitel 10 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:
ausblenden 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:
ausblenden 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
ausblenden 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)
   {
      // save to file as xml
   }
}

CSV
ausblenden 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:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
// Person erstellen
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 23



BeitragVerfasst: So 14.03.10 12:28 
Hallo, Daniel
Vielen Dabk für Deine Hilfe.
Peter
Oppi35
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 95
Erhaltene Danke: 3



BeitragVerfasst: Do 27.05.10 19:17 
ausblenden 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:
ausblenden 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 user profile iconChristian S.: C#-Tags hinzugefügt
gfoidl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 157
Erhaltene Danke: 19

Win XP
C#, Fortran 95 - Visual Studio
BeitragVerfasst: Do 27.05.10 19:26 
Hallo Oppi35,

eine ähnliche Frage wurde hier behandelt.


mfG Gü

_________________
Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!