Ist es möglich, eine Basisklasse wie die folgende zu erstellen:
%Vor%, so dass Klassen, die es überschreiben, die erforderlichen Parameter definieren können? Mit anderen Worten, ich möchte erzwingen, dass die Methode außer Kraft gesetzt wird, aber überlasse es der übergeordneten Klasse, was hier erforderlich ist - so könnte man es auch sein
%Vor%während ein anderer sein könnte
%Vor%?
Danke für jede Hilfe, die Sie geben können
Absolut nicht - das würde den halben Punkt der abstrakten Methode sprengen - niemand würde es nennen können, weil sie nicht wüssten, welche Methodensignatur tatsächlich geschrieben wurde. Der springende Punkt einer abstrakten Klasse ist, dass ein Client eine Referenz vom Typ BaseClass
haben kann, ohne sich darum kümmern zu müssen, was der Typ der tatsächlichen Implementierung ist.
Wenn die Basisklasse im Voraus vorhersagen kann, um welche Arten es sich handelt, besteht eine Möglichkeit, dem Aufrufer das Leben leichter zu machen, darin, die allgemeinste Signatur (typischerweise die mit den meisten Parametern) zu abstrahieren und verschiedene Überladungen vorzunehmen which ruft diesen allgemeinen Standard auf, der Standardwerte für die Parameter bereitstellt, die der Client nicht angegeben hat.
Nein, das ist nicht möglich. Eine überschreibende Methode muss die Parameter exakt anpassen - sie entspricht der Implementierung einer Schnittstelle. Möglicherweise interessieren Sie sich für das Muster double-dispatch-in- .
Es kann getan werden, wenn die Parameter alle auf den gleichen Typ und in der gleichen Zahl gesetzt wurden, denke ich (nicht sicher, ob Sie die Parameter T [] verwenden können, aber wenn es möglich ist, dann können Sie es auch anpassen). Sie können erreichen, indem Sie Generics, wie @ simonalexander2005 sagte
%Vor%Es liegt an Ihnen, zu entscheiden, wie viele Parameter die abgeleitete Klasse verwenden wird. Aber ich bin mir nicht sicher, ob es eine gute Übung ist ...
Tags und Links c# methods parameters override