Einzelnen Beitrag anzeigen

Muetze1
(Gast)

n/a Beiträge
 
#7

Re: class function <> normale function mit Klassenzuge

  Alt 2. Mär 2007, 09:40
Zitat von yankee:
Scheisskram
Ok, aber warum sollte ich hier gross erklären, wenn es für dich eh "Scheisskram" ist? Warum sollte ich dann noch meine Zeit opfern?

Zitat von yankee:
... ich weiss schon mal nicht, was eine MetaClass ist und meine Delphihilfe kennt das Wort auich nicht.
1. Mein Delphi 5 kennt in der Hilfe schon den Begriff "Metaklassen" und bietet dazu gleich zwei ausführliche Themen mit Beispielen an. Mein Delphi 7 sowie BDS2006 bieten diese Hilfe genauso an unter dem Begriff.
2. Aber die Suche in der DelphiPraxis ergibt 4 Threads bei mir, wobei die letzten beide das gut erklären.

Zitat von yankee:
Delphi-Quellcode:
tmp :=TSortedList.Create;
  tmp.Compare :=@TIntTest.Compare;
Du hast ja recht, das Self definiert ist, aber wo kommt es her??
Er wird still und heimlich übergeben, da es sich um eine Methode handelt. Wenn es keine Methode ist sondern eine Procedure/Funktion, hast du auch kein Self.

Zitat von yankee:
Zitat von Elvis:
Was passiert wenn du eine Funktion, die 3 Parameter haben will per Gewalt in einen Funktionszeiger steckst, der nur 2 Parameter hat?
Compilererror: Not enough Parameters.
Ja, aber nur, wenn du die Compilertypprüfung nicht absichtlich umgehst. Dies machst du in deinem Code nunmal. Wenn du es auf einen untypisierten Zeiger umwandelst, was soll der Compiler dann noch überprüfen? Du zwingst ihn dazu, das als Zeiger zu verarbeiten und somit kann er sein Wissen über die Methode und deren Signatur nicht mehr anwenden. Jede Sprache kann noch so typsicher sein, wenn man mit Pointern arbeiten kann ist alles für die Katz' bzw. übergehbar. Du schiesst diese Typprüfung mit deinem Code selber ab. Das sie funktioniert hattest du selber mitbekommen, als du es ohne die @ kompilieren wolltest - aber egal, das war zumindest von dir gemachter "Scheissdreck".

Zitat von yankee:
Dann sag' mal, wie ich der Funktion den dritten Paramater übergebe.
Es kann ja wohl nicht sein, dass es eine Unmöglichkeit ist class-Functions aufzurufen.
Nein, ist es nicht, aber da du es so nicht verstehst, mal ein anderes Beispiel dazu:

Wie würdest du folgendes Problem lösen: Du hast ein Bohrloch mit metrischen Schraubgewinde. Dazu stehen dir eine passende Schraube zur Verfügung sowie eine Nietmaschine, deren Nieten den gleichen Umfang haben. Womit würdest du nun ein Blech mit Loch an dem Loch mit Gewinde anbringen? In deinem Code machst du es zZ mit der Niete obwohl der Compiler sich sogar dagegen wehrt.

Sort() gibt fest vor, welche Art von Procedure/Funktion er in welcher Form haben will. Dies braucht er auch, damit er so den Aufruf tätigen kann und somit auch fest weiss wieviele Parameter er übergeben muss und auch entsprechend wann abräumen muss. Wenn du nun aber ganz stur mit deiner Niete (Class Method) kommst, dann wird das nix. Sort will keine Class Procedure und somit steht es hier ausser Frage unbedingt eine nehmen zu wollen. Sort gibt dir vor, wie deine Sortierungsfunktion auszusehen hat - wenn du das nicht willst oder die Class Procedure nutzen willst, dann implementiere Sort komplett selber.

Und zu deiner Grundaussage zu kommen: Sort ruft die Procedure auf und nicht du, somit kannst du auch nicht einen Parameter zusätzlich übergeben.
  Mit Zitat antworten Zitat