10 Stimmen

Wie kann man für Typen, die eine Schnittstelle implementieren, einen Konstruktor ohne Parameter verlangen?

Gibt es einen Weg?

Ich brauche alle Typen, die eine bestimmte Schnittstelle implementieren, um einen parameterlosen Konstruktor haben, kann es getan werden?

Ich entwickle den Basiscode für andere Entwickler in meinem Unternehmen, die ihn für ein bestimmtes Projekt verwenden sollen.

Es gibt einen Prozess, der Instanzen von Typen (in verschiedenen Threads) erstellt, die bestimmte Aufgaben ausführen, und ich brauche diese Typen, um einem bestimmten Vertrag (ergo, die Schnittstelle) zu folgen.

Die Schnittstelle wird intern in der Baugruppe sein

Wenn Sie einen Vorschlag für dieses Szenario ohne Schnittstellen haben, werde ich ihn gerne in Betracht ziehen...

1voto

Mark Brackett Punkte 83046

Rufen Sie eine RegisterType-Methode mit dem Typ auf, und schränken Sie ihn mit Hilfe von Generika ein. Dann, anstatt durch Assemblies zu gehen, um ITest-Implementierer zu finden, speichern Sie sie einfach und erstellen Sie von dort aus.

void RegisterType<T>() where T:ITest, new() {
}

0voto

Vaibhav Punkte 11143

Das glaube ich nicht.

Sie können auch keine abstrakte Klasse für diese Aufgabe verwenden.

0voto

Frank Krueger Punkte 67044

Ich möchte alle daran erinnern:

  1. Das Schreiben von Attributen in .NET ist einfach
  2. Das Schreiben von Tools zur statischen Analyse in .NET, die die Konformität mit Unternehmensstandards sicherstellen, ist einfach

Ein Tool zu schreiben, das alle konkreten Klassen erfasst, die eine bestimmte Schnittstelle implementieren/ein Attribut haben, und zu überprüfen, ob sie einen parameterlosen Konstruktor haben, erfordert etwa 5 Minuten Programmieraufwand. Sie fügen es zu Ihrem Post-Build-Schritt hinzu und haben nun einen Rahmen für alle anderen statischen Analysen, die Sie durchführen müssen.

Die Sprache, der Compiler, die IDE, Ihr Gehirn - sie alle sind Werkzeuge. Benutze sie!

0voto

Landon Kuhn Punkte 65193

Nein, das können Sie nicht tun. Vielleicht wäre für Ihre Situation eine Werksschnittstelle hilfreich? So etwas wie:

interface FooFactory {
    Foo createInstance();
}

Für jede Implementierung von Foo erstellen Sie eine Instanz von FooFactory, die weiß, wie sie zu erstellen ist.

0voto

Andrei Rînea Punkte 19502

Sie benötigen keinen parameterlosen Konstruktor für den Activator, um Ihre Klasse zu instanziieren. Sie können einen parametrisierten Konstruktor haben und alle Parameter vom Activator übergeben. Sehen Sie sich MSDN zu diesem Thema .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X