| 

.NET C# Java Javascript Exception

4
Ich will in einem Interface definieren, dass eine Klasse immer einen Konstruktor haben muss mit einer ganz bestimmten Parameterliste.

Etwa so.

using System;
interface IInterface
{
void ctor(string etwas);
}
public class Class1 : IInterface
{
public Class1(){}
public Class1(string etwas){}
}
public class Class2 : IInterface
{
public Class2(){}
public Class2(string etwas){}
}


Wie sieht ein solches Interface aus?
28.08.2009
GENiALi 2,1k 2 8
4 Antworten
7
AFAIK, Nein.

Die Doku zur Beschreibung eines Interface sagt:

"Eine Schnittstelle kann ein Member eines Namespaces oder einer Klasse sein und Signaturen der folgenden Member enthalten:
Methoden
Eigenschaften
Indexer
Ereignisse
"

Servus,
Klaus
28.08.2009
klaus_b 1,6k 2 6
2
Ein Konstruktor kann wie bereits erwähnt nicht in der Schnittstelle definiert werden. Möglich ist jedoch die Definition einer Fabrik welche das Objekt erzeugt - bringt aber nichts denn die Fabrikmethode sollte statisch sein und das geht mit Schnittstellen ebenfalls nicht.

Das einzige wo das möglich ist sind abstrakte Klassen - dabei muss jedoch die Vererbungshierarchie in Betracht gezogen werden.
28.08.2009
gfoidl 9,1k 3 5
2
Konstruktoren gehen zu stark auf die konkrete Verwendung ein und stehen damit dem Schnittstellenprinzip entgegen. Schnittstellen sind für starke polymorphe Anwendungen gedacht. Wenn man Konstruktoren allgemein definieren möchte aber die Implementation konkreter Sachverhalte spezielleren Klassen überlassen möchte, sind wahrscheinlich abstrakte Klassen die bessere Wahl...

...es sei denn man hat sich in der Vererbungshierarchie mit abstrakten Klassen die Möglichkeit genommen... Abstrakte Klassen sollte man dann verwenden, wenn die Vererbungshierarchie wenigen Änderungen unterliegt, also eher eine schwache Polymorphie aufweist. Der Wunsch einen vordefinierten Konstruktor zu verwenden ist ein Indiz dafür, dass man eine abstrakte Klasse verwenden sollte.

Beispiel "Iterator". Hierbei handelt es sich um ein Interface, weil man im Prinzip über "Hans und Pup" iterieren möchte. Die stark polymorphe Ausprägung der Verwendung bedingt eine Schnittstelle.

Fazit: Vergiss das mit den Konstruktorensignaturen in Interfaces.
13.05.2011
oopexpert 290 7
1
Scheint nicht zu funktionieren. Habe hier noch eine Diskussion zum Thema gefunden.

Eventuell könnte es mit generischen Interfaces klappen. Mal genauer anschauen.
28.08.2009
GENiALi 2,1k 2 8
Da meine Antwort also richtig zu schein seint, wöhre es nett wen du sie auch akzeptieren würdest :-)
klaus_b 28.08.2009

Stelle deine .net-Frage jetzt!