Delphi-Quellcode:
Visitor = class
public
procedure Visit(a : A); overload;
procedure Visit(b : B); overload;
end;
Wieso 2 verschiedene Methoden, wo sie doch genau das Selbe machen?
Delphi-Quellcode:
Visitor = class
public
procedure Visit(b: Base);
end;
procedure Visitor.Visit(b: Base);
begin
WriteLn(b.ClassName);
end;
Und schon muß Visitor und Base deine A und B nicht kennen und schon kannst du Visitor und Base in eine
Unit packen und A, sowie B lassen sich in anderen Units unterbringen.
"x" kann als Basisklasse ja die beiden abgeleiteten Klassen/Objekte entgegennehmen.
Es muß sich also in der Hauptunit alles nur mit der Basisklasse erledigen lassen und das Klassenspezifische muß halt überschrieben und von den Subklassen erledigt werden.
Aber ansonsten hast du (wie Markus schon sagte) keine Chance und mußt alles in der selben
Unit verpacken.