Frage

Ich habe das Gefühl, ich weiß die Antwort schon Leute geben wollen, aber hier geht sowieso:

sagen, ich bin eine neue Klasse zu schreiben, nennen wir es PooledQueue<T>, im Konstruktor, von dem ich ein Argument akzeptieren wollen, die die Schnittstelle IResourcePool<T> implementiert. Die Idee dabei ist, dass ich mit unter Verwendung eines beliebigen zugrundeliegenden Pool-Objekt gut geht, solange es gibt mir die Eigenschaften / Methoden der IResourcePool<T> (Sie wissen schon, die ganze Idee hinter Schnittstellen, nicht wahr?).

Aber wenn es bereits eine Klasse zur Verfügung, die alle Funktionen von IResourcePool<T> bietet, mit der Ausnahme, dass es nicht implementieren IResourcePool<T> (und ich kann den Quellcode nicht ändern ), gibt es eine Möglichkeit für mich, die Umsetzung zu zwingen?

Was erwarte ich Menschen zu beantworten ist, dass ich nur einen Wrapper für die bestehende Klasse machen, die die notwendige Schnittstelle nicht implementiert. Aber ich würde nur in der Lage sein es vorziehen, dies zu tun:

// GetDataPool returns an object of type Pool<Data> that I can't modify
var q = new PooledQueue<Data>(GetDataPool());

statt dies:

var q = new PooledQueue<Data>(new PoolWrapper<Data>(GetDataPool()));

ich denke, was ich fühle, wäre wirklich hilfreich, wenn eine Implementierung einer Schnittstelle der Klasse könnte getrennt von der Klassendefinition definiert werden. Art der Art und Weise eine gut konzipierte Datenbank structued - mit Zuordnungstabellen verknüpfen Einheiten mit IDs von anderen Tabellen. Macht das Sinn?

War es hilfreich?

Lösung

Aus dem Kasten heraus, man kann nicht eine Schnittstelle für eine Klasse zwingen, ohne es zu erben.

Es gibt Möglichkeiten, wie die Verwendung eines transparenten Linfu , die es Ihnen ermöglichen, Sachen wie diese zu simulieren, aber zu höheren Kosten als Ihre Wrapper-Klasse zu machen.

In der Tat könnte man eine Überlastung Konstruktor machen, die für Sie den Wrapper erzeugt, so dass der Code sauber bleibt ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top