Interface

C

cossy

hi,
kann mir einer sagen was genau
ein interface ist?

bin ein neuling in c# und kann
das interface nicht richtig zuordnen
bzw. kann damit nichts anfangen !
 

Dario Linsky

Erfahrenes Mitglied
Ein Interface hat in erster Linie nicht unbedingt was mit C# zu tun, sondern allgemein mit objektorientierter Programmierung, speziell bei der Definition von Klassen. Grob gesagt ist ein Interface ein grundlegendes Muster für eine oder mehrere Klasse(n) ohne eine eigene Implementierung. Das Verhalten wird erst durch die Klasse selbst hinzugefügt.
Kleines Beispiel:
Ein Fahrzeug kann nur ein Fahrzeug sein, wenn es bestimmte Eigenschaften und Fähigkeiten besitzt. Bezogen auf die OOP heisst das, dass eine Klasse für Fahrzeuge eine bestimmte Struktur haben müssen, die z. B. folgendermassen aussieht:
Code:
interface IFahrzeug {
    public int Hoechstgeschwindigkeit {
        get;
    }
    public void Losfahren();
    // noch viel mehr Methoden und Membervariablen
}
Wenn Du jetzt z. B. eine Klasse für Autos ableiten willst, dann muss diese Klasse alle Methoden und Eigenschaften für Fahrzeuge besitzen, also implementierst Du das Interface. Für Fahrräder und Rollschuhe genau so wie für Schiffe, Tretboote und Trams oder Bobbycars. Aber da sich bei jedem dieser spezielleren Fahrzeuge die Verhaltensweisen beim Losfahren beispielsweise unterscheiden, musst Du für jedes davon eine eigene Methode implementieren.

Ich hoffe, das war jetzt nicht zu verwirrend. :)

Gruss, Dario
 

jccTeq

Erfahrenes Mitglied
beim Remoting zum Beispiel wendet man das Prinzip der Interfaces gerne an, um den ungeschützten Code vor dem Benutzer quasi zu verstecken. Dabei wird eine DLL erstellt, die nur das Interface beinhaltet und die eigentliche Funktionalität nachher im Server selbst (die DLL, die der Host aufruft, welche geschützt auf dem Server-System liegt) implementiert.

Wer das Client -> Host -> Server System von .NET (Remoting genannt) nicht kennt, kurzer Versuch der Einführung:
Der Kunde erhält vom Entwickler ein Programm (den Client) und eine DLL, die dieser Client benötigt, um Zugriff auf die entsprechenden Methoden / Objekte zu bekommen. Die Methoden / Objekte werden auf dem Serversystem gehalten bzw. ausgeführt. Die Verbindung zum Serversystem stellt der Client per TCP/IP her und benötigt auf der Gegenstelle (auf dem Serversystem) eine Anwendung, die als Host bezeichnet wird und nichts anderes tut, als den eigentlichen Server in Form einer DLL dynamisch einzubinden, welche die eigentliche Funktionalität zur Verfügung stellt. Da der Client aber die Methoden und Objekte des Servers kennen muss, müsste die DLL, welche eben jenen Server darstellt, mit zum Kunden ausgeliefert werden. Der enthaltene Code wäre also vollkommen ungeschützt vor der Dekompilierung. Daher nutzt man die Technik der Interfaces, sodaß nur eben die Prototypen der benötigten Methoden zusammen mit dem Client an den Kunden übergeben werden.

Hoffe, das war jetzt nicht zu unverständlich. Dies ist nur ein mögliches Einsatzgebiet von Interfaces.
 

Alexander Schuc

crazy-weasel
Original geschrieben von jccTeq
beim Remoting zum Beispiel wendet man das Prinzip der Interfaces gerne an, um den ungeschützten Code vor dem Benutzer quasi zu verstecken. Dabei wird eine DLL erstellt, die nur das Interface beinhaltet und die eigentliche Funktionalität nachher im Server selbst (die DLL, die der Host aufruft, welche geschützt auf dem Server-System liegt) implementiert.

Wer das Client -> Host -> Server System von .NET (Remoting genannt) nicht kennt, kurzer Versuch der Einführung:
Der Kunde erhält vom Entwickler ein Programm (den Client) und eine DLL, die dieser Client benötigt, um Zugriff auf die entsprechenden Methoden / Objekte zu bekommen. Die Methoden / Objekte werden auf dem Serversystem gehalten bzw. ausgeführt. Die Verbindung zum Serversystem stellt der Client per TCP/IP her und benötigt auf der Gegenstelle (auf dem Serversystem) eine Anwendung, die als Host bezeichnet wird und nichts anderes tut, als den eigentlichen Server in Form einer DLL dynamisch einzubinden, welche die eigentliche Funktionalität zur Verfügung stellt. Da der Client aber die Methoden und Objekte des Servers kennen muss, müsste die DLL, welche eben jenen Server darstellt, mit zum Kunden ausgeliefert werden. Der enthaltene Code wäre also vollkommen ungeschützt vor der Dekompilierung. Daher nutzt man die Technik der Interfaces, sodaß nur eben die Prototypen der benötigten Methoden zusammen mit dem Client an den Kunden übergeben werden.

Hoffe, das war jetzt nicht zu unverständlich. Dies ist nur ein mögliches Einsatzgebiet von Interfaces.

Im Tutorials .net Remoting - Wie programmiere ich einen ChatServer hier auf Tutorials.de hättest eine Beispielanwendung die mit Interfaces arbeitet.

Noch eine Möglichkeit zur Verwendung von Interfaces sind Plugin-Systeme.
Jedes Plugin soll die selben öffentlichen Methoden haben um mit dem Hauptprogramm kommunizieren zu können. Deswegen leitet man das Plugin von einem bereitgestelltem Interface ab.
 

jccTeq

Erfahrenes Mitglied
Die Möglichkeiten mit C# respektive .NET sind einfach wahnsinn und dennoch recht einfach zu realisieren (Ausnahmen bestätigen die Regel, s. anderer Thread, Zufallsgenerator). Ich habe letzte Woche gerade ein einwöchiges Seminar auf C# gehabt. Leider wurde dabei nicht auf den Randomizer eingegangen... aber sehr intensiv auf Remoting und auf Assemblies, speziell Shared Assemblies, Public/Private Keys und Versionisierung.

Da hat Microsoft wohl endlich mal was gutes entwickelt. ;)
 

jccTeq

Erfahrenes Mitglied
Naja, man hat wohl Wert auf Transparenz und Sicherheit gelegt. Das scheint gelungen. Bin auch mal auf Version 2 gespannt. Und auf die Fortschritte des Mono-Projekts! An meinem Arbeitsplatz entwickle ich "leider" hauptsächlich Linux-Anwendungen, nicht selten sehr hardwarenah. Da fehlt einem dann häufig doch die Funktionalität von C# und .NET.