Ist es möglich, dass die Parameterliste einer abstrakten Methode überschreibbare Länge und Typen hat?

8

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

    
simonalexander2005 29.01.2011, 19:07
quelle

3 Antworten

10

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.

    
Jon Skeet 29.01.2011, 19:10
quelle
0

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- .

    
Mark Cidade 29.01.2011 19:15
quelle
0

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 ...

    
Edward 29.01.2011 20:02
quelle

Tags und Links