In C # ist es möglich, etwas wie folgt zu schreiben:
%Vor% Ich weiß, dass die obige Implementierung nicht kompiliert, aber was ich eigentlich zu erreichen versuche, ist die Implementierung einer Art generischen Wrapper zu einem unbekannten Typ, so dass ein Client den Wrapper so aufrufen kann, wie er den angegebenen Typ nennen würde durch den Parameter T
, anstatt es mit etwas wie wrapper.Instance.SomeMember()
aufzurufen.
Vielen Dank im Voraus!
Dies ist nicht möglich.
Meiner Meinung nach sollte ein Wrapper nicht durch Vererbung implementiert werden.
Nehmen wir zum Beispiel an, wir haben eine Klasse Engine
und Sie müssen eine FerrariEngine
implementieren. Und Sie haben eine Klasse Car
.
Sie sagen, dass Car
FerrariEngine
erben soll. Es sieht schrecklich für mich aus!
Am Ende des Tages möchten Sie so etwas wie die Injektion von Abhängigkeiten unter Verwendung von Vererbung tun, und das ist wiederum nicht der richtige Weg.
Mein Vorschlag ist versuchen Sie nicht, Ihr Leben einfacher zu machen : Entscheiden Sie sich für eine Architektur, die auf rationalen Punkten basiert.
Das OP sagte in einem Kommentar:
Ich möchte diese Klasse dazu bringen, Instanzen von Objekten vom Typ T zu verwalten dass der Client sich nicht darum kümmern muss, wenn die Instanzen es benötigen erstellt werden.
Sie müssen keine seltsamen Dinge machen, um zu bekommen, was Sie wollen:
%Vor% Schließlich, wenn wir eine Instanz von FerrariCar
erstellen:
Die Engine wird ohne Entwicklereingriff instanziiert und gestartet!
Überprüfen Sie, wie Lazy<T>
und grundlegende generische Einschränkungen den Job machen;)
Zusammenfassend:
Lazy<T>
wird die Engine nur instanziiert, wenn einige auf die Engine
-Eigenschaft zugreifen. FerrariEngine
selbst aufruft und die Engine startet. Ich glaube, dieses Beispiel zeigt Ihnen, wie Sie das bekommen, wonach Sie suchen und C # "wie es ist" verwenden!
Tags und Links c# design-patterns generics oop