Hallo,
die folgende Formulierung passt nur sehr bedingt:
Oppi35 hat folgendes geschrieben : |
| dass man mit Interfaces die Möglichkeit hat, eine neue Klasse mit einer bereits programmierten Schnittstelle zu befüllen, also dem Grundgerüst. |
Eine Schnittstelle ist "nur" ein Vertrag, dass bestimmte Bedingungen gegeben sind. Eine Klasse, die "von einer Schnittstelle abgeleitet" (äußerst unsaubere Formulierung) ist, verpflichtet sich, diesen Bedingungen zu entsprechen. "bereits programmiert" ist also nur die Deklaration von Eigenschaften und Methoden, aber nicht deren Implementation; das ist Sache der Klasse.
Auf dieser Grundlage ist der von dir genannte Code zu verstehen:
Oppi35 hat folgendes geschrieben : |
C#-Quelltext 1:
| IFormatter formatterout = new BinaryFormatter(); | |
Die Variable formatterout erfüllt die Bedingungen der Schnittstelle IFormatter. Gleichgültig um welche Klasse es sich wirklich handelt: Der Compiler kann sicher sein, dass die Eigenheiten der Schnittstelle vorhanden und in der Klasse implementiert sind, und er kann deshalb damit arbeiten.
In diesem Zusammhang: Es ist auch so etwas möglich:
C#-Quelltext
1: 2:
| MainForm frm = new MainForm(); Control ctrl = frm; |
Da Form von Control abgeleitet ist, funktioniert die Zuweisung. Mit der Variablen ctrl können aber nur Eigenschaften von Control genutzt werden, aber keine von MainForm (obwohl intern weiterhin bekannt ist, dass es sich um ein Hauptformular handelt). Erst mit der folgenden Zuweisung hast du wieder Zugriff auf die MainForm-Spezialitäten:
C#-Quelltext
1:
| MainForm form2 = ctrl as MainForm; |
Ich weiß, dass das Denken mit Interface etwas Gewöhnung braucht. Es macht aber manches einfacher, vor allem bei Zuweisungen oder Verwendung eines bestimmten Objekts in verschiedenen Zusammenhängen.
Gruß Jürgen