![]() |
Sender als const?
Moin,
Standardmässig sind Sender ja ohne "const"(siehe TNotifyEvent), hätte das irgendein Nachteil in meinen eigenen methoden wenn ich selbiges dort benutze? also "const Sender: TObject" ? Bzw hätte dies einen Vorteil? |
Re: Sender als const?
Guck doch in der Hilfe, was das const bei der Parameterübergabe bewirkt:
Zitat:
Ich zitiere mal aus Motzis String-Tutorial: Zitat:
|
Re: Sender als const?
Nachteil: Du kannst nur noch lesend auf den Sender zugreifen
Vorteil: Du kannst nur noch lesend auf den Sender zugreifen ;) Kommt halt drauf an was du vor hast, und ob dich der Compiler daran hindern soll am Sender zu fummeln. Ein var dürfte im Übrigen keinen Unterschied zur modifikatorlosen Deklaration machen, da eh nur eine Referenz übergeben wird, und bei Objekten, anders als bei Strings und Records, auch keine Duplikate im Hintergrund erzeugt werden (beim ersten schreibenden Zugriff innerhalb der betr. Methode). Also macht es nur dann und dafür Sinn, wenn du sicher stellen willst, dass am Sender-Objekt nichts verändert werden kann. |
Re: Sender als const?
Zitat:
Beispiel:
Delphi-Quellcode:
1. Probiere es doch einfach aus, ob du bei einem TNotfifyEvent ein const einbauen kannst. Ich glaube nämlich nicht, da sich die Aufrufe intern unterscheiden. Und bei Objekten macht es keinen Unterschied. Mit Const übergibt er die 4 Bytes Referenz auf die Variable ohne const übergibt er die 4 Bytes Referenz auf das Objekt selber. Du hast also nichts gewonnen.
procedure Test(sender: TObject);
begin Sender:=nil; end; procedure Test2(var sender: TObject); begin Sender:=nil; end; var TestObject: TObject; begin TestObject:=TObject.Create; Test(TestObject); // Nach dem Aufruf zeigt TestObject immer noch auf das erstellte Object Test2(TestObject); // Nach dem Aufruf zeigt TestObject auf nil. end. |
Re: Sender als const?
Zitat:
Vorteil von const bei String/Widestring und array-Parametern ist, das das Programm kleiner und schneller wird. Bei Objekt-Referenzen ist der Vorteil dagegen "nur" das die Referenz nicht geändert werden kann - also Minimal. |
Re: Sender als const?
Moin Leute,
ich weiss schon wo der Unterschied zwischen const/var/keiner angabe ist, meine Frage bezog sich mehr auf, ob es was nützt Pointer (also referenzen) mit const anzugeben ;) Aber ich denke so wie sich das hier anhörte tut es das nicht :) Was tut const eigentlich genau? Eine kopie der variable wird ja nicht angelegt, kann ich also davon ausgehen das es auch eine referenz ist die man nur nicht ändern kann? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz