Was Sie haben, ist fast, aber nicht genau eine abstrakte Fabrik. Ich werde zuerst sagen, dass Sie es den Implementierern der abgeleiteten Klassen überlassen sollten, um es richtig zu machen, oder einfach darauf vertrauen, dass sie es tun werden.
Eine andere Antwort hat gezeigt, was als merkwürdig wiederkehrendes Vorlagenmuster bekannt ist. Dort haben Sie eine Basisklasse, die versucht, das Typsystem zu verwenden, um zu erzwingen, dass abgeleitete Typen sich bei bestimmten Eingaben oder verwenden Ausgabepositionen.
%Vor%Diese Idee könnte in anderen Sprachen funktionieren. Es funktioniert nur in C # soweit die Leute es richtig benutzen. Mit der obigen Definition von Bar kann ich jetzt auch
haben %Vor% Was vollkommen legal ist. Bar
ist ein Foo<Bar>
, das ist alles was benötigt wird um es zu benutzen. Nichts erfordert, dass Baz tatsächlich Foo<Baz>
verwendet.
Das Typsystem in C # kann einfach nicht durchsetzen, was Sie erzwingen möchten. Auch wenn dieses Muster vorhanden ist, befinden Sie sich immer noch in der gleichen Position wie zuvor. Sie müssen immer noch den Implementierern der abgeleiteten Klassen vertrauen, um es richtig zu machen.
Weitere Informationen zu diesem Thema finden Sie in diesem Blog unter .
Tags und Links c# inheritance abstract-class