Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Class Procedures + Interface (https://www.delphipraxis.net/128244-class-procedures-interface.html)

himitsu 26. Jan 2009 20:28


Class Procedures + Interface
 
n'abend ihr, :angel:

solange innerhalb dieser Function nicht auf Self (also die Klasse) zugegriffen wird, geht ja sowas,

aber gäbe es Probleme, wenn ich dieses auch noch über ein Interface zugänglich mach?
Delphi-Quellcode:
TMyClass = Class(TObject, IMyInterface)
  Class Function CheckString(Const Value: AnsiString): Boolean; Virtual;
End;

Var MyClass: TMyClass;

If TMyClass.CheckString('123') Then Beep;
If MyClass.CheckString('123') Then Beep;

Eigentlich wollte ich nur die selbe Function über die Klasse und die Objectreferenz zugänglich machen,
nur leider geht sowas nicht zu überladen (wenn Name und Parameter gleich bleiben ... selbst nicht, wenn es einmal Class Procedure ist und das andere nur Procedure)

im Grunde wäre es ja besser, wenn ich die Funktionsnamen änder, aber ich wollt liebendgern die selbe Funktion in allen fällen nutzen können :?

es ist nur für eine Testfunktion, mit welcher getestet wird, ob das Object/die Klasse dafür genutzt werden kann.

mr2 26. Jan 2009 20:51

Re: Class Procedures + Interface
 
so könnte es funktionieren:

Delphi-Quellcode:
  IMyInterface = interface(IInterface)
  ['{82DD5CD1-3A07-4810-9E3F-68B28D59E528}']
    function CheckString(const Value: AnsiString): Boolean;
  end;

  TMyClass = class(TInterfacedObject, IMyInterface)
    function MyCheckString(const Value: AnsiString): Boolean;
    class function CheckString(const Value: AnsiString): Boolean; virtual;
    function IMyInterface.CheckString = MyCheckString;
  end;
mr2

himitsu 26. Jan 2009 21:11

Re: Class Procedures + Interface
 
:shock: also vom Code her sieht's schonmal cool aus

und auch der Compiler läuft anstandslos an diesen Zeilen vorbei

muß jetzt erstmal noch einiges fertig umbauen und werd's dann im laufenden Programm testen

das ich MyCheckString nach nach PRIVATE verschoben hab, dürfte nicht stören.

muß auch noch testen ob das zugehörige IOperatorInterface.CheckBinary bzw MyCheckString in der Codevervollständigung auftaucht ... einmal Checkstring darin würde schließlich ausreichen.




gibt es solche umgeleiteten Definitionen eigentlich auch noch an anderer Stelle?
und vielleicht auch noch Objectübergreifend?
[add2]
Delphi-Quellcode:
TMyClass = class
  function MyCheckString(const Value: AnsiString): Boolean;
  function TestCheckString = MyCheckString;
end;
geht leider nicht schade, hätt ich gebrauchen können :cry:
[/add2]

wollt grad fragen ab wann (Delphiversion) dieses überhaupt funktioniert, aber da die knuffigen Record-Operatoren eh nicht überall laufen, ist das für mich dann erstmal egal :stupid:
[add]grad mal erfolgreich in D7 getestet ... es weiß nicht zufällg wer unter welchem Namen dieses z.B. in der OH zu finden ist :?: [/add]



ja und vielen Dank erstmal :kiss:

Hawkeye219 26. Jan 2009 22:16

Re: Class Procedures + Interface
 
Hallo himitsu,

in der Hilfe von Delphi 6 ist das im Index unter "Methodenzuordnung" zu finden.

Bei Delphi 2006 gehst du am besten über die Suchfunktion mit dem Suchbegriff "Methodenzuordnungsklausel".
Der Direktlink ist "ms-help://borland.bds4/bds4ref/html/ImplementingInterfaces.htm#MethodResolutionClause" .

Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz