// Das Interface
public interface IMyNameInterface
{
// Property Id - muss von jedem implementiert werden, der das Interface verwendet
string Id{ get; set; }
}
// Die Klasse, die das Interface implementiert
public class MyClass: IMyInterface
{
// Dieses Property wird vom Interface vorgegeben, MyClass muss es implementieren
public string Id{ get; set; }
}
|
Eine Schnittstelle legt einen Vertragsrahmen fest, den die implementierende Klasse erfüllen muss.
|
|
|
Der Tipp auf GoF (Design-Patterns) war gut. Ich würde bei diesem Buch das englische Original empfehlen, da zuviel Begriffe in der Übersetzung eingedeutscht wurden. Ansonsten: Sehr anschauliche Erklärung. +1
– Jürgen Luhr 22.03.2011
|
||
Dankeschön!
Der Vollständigkeit halber (für andere Leser, die vielleicht noch nichts davon gehröt haben): GoF = Gang of Four, das vierköpfige Autorenteam des ersten der beiden Bücher, die ich genannt habe. – Matthias Hlawatsch 22.03.2011
|
interface IPlugin
{
void Init();
void LoadSettings();
//...
}
class MyProgram
{
static List<IPlugin> Plugins
publc static void Main()
{
Plugins = new List<IPlugin>();
// Alle DLLs (Assemblies) aus einem definierten Verzeichnis laden
// und nach Types durchsuchen, die IPlugin implementieren.
// Die dann instanziieren und an die Liste Plugins anhängen.
// Hier nur als Beispiel MyPlug auf die Liste gepackt.
MyPlug mp = new MyPlug();
Plugins.Add( mp );
// Diese drei Zeilen bewirken dasselbe.
// Das Schöne ist, dass Du den Typ MyPlug nicht kennen musst, sondern
// einfach mit IPlugin arbeiten kannst, ohne Referenzen in Deinem C# Projekt
// angeben zu müssen.
IPlugin p = Plugins[0];
Plugins[0].Init();
p.Init();
mp.Init();
}
}
// Beipiel Plugin
class MyPlug : IPlugin
{
void Init()
{
// do some init
}
void LoadSettings()
{
// load the settings
}
}
|
|
2 |
Inhaltlich hast Du natürlich Recht, aber ob verteilte Architekturen das richtige Beispiel für einen Einsteiger sind?
Vor allem aber: ich halte es eher für verwirrend, davon zu sprechen, dass eine Klasse von einem Interface "ableitet". Ableiten würde ich nur im Zusammenhang mit Vererbung von einer Basisklasse verwenden, ein Interface hingegen wird "implementiert". in Java wird das gut deutlich: dort gibt es für die beiden Zwecke die Schlüsselwörter "extends" und "implements" - aus gutem Grund, wie ich finde. – Matthias Hlawatsch 22.03.2011
|
|
1 |
Da hast du natürlich recht.
Aber das Beispiel find ich garnicht so schlecht. Auch ein Anfänger sollte ruhig mal kurz einen Blick in die Zukunft werfen um zu verstehen was der Sinn des ganzen ist. Gerade das Beispiel bot sich zudem sehr gut an um zu erklären warum das ganze auch "Vertrag" genannt wird. – Floyd 22.03.2011
|