在C++中,Delphi對應'this'是什麼?你能舉一些它的用途嗎?Delphi中的實例引用?
回答
在大多數情況下,您不應該在方法中使用self
。
事實上,這就像如果有一個隱含的self.
前綴,當你訪問類的屬性和方法,一類方法中:
type
TMyClass = class
public
Value: string;
procedure MyMethod;
procedure AddToList(List: TStrings);
end;
procedure TMyClass.MyMethod;
begin
Value := 'abc';
assert(self.Value='abc'); // same as assert(Value=10)
end;
的self
是用來當你想指定當前反對另一種方法或對象。
例如:
procedure TMyClass.AddToList(List: TStrings);
var i: integer;
begin
List.AddObject(Value,self);
// check that the List[] only was populated via this method and this object
for i := 0 to List.Count-1 do
begin
assert(List[i]=Value);
assert(List.Objects[i]=self);
end;
end;
這上面的代碼將項目添加到TStrings
列表,List.Objects []指向TMyClass實例。而且它會檢查列表中所有項目的情況。
在delphi中自我就等於這個。它也可以按照here中的描述分配。
請注意,由於它是按值傳遞的,賦值給Self並不是非常有用,儘管它可以完成。它不會像一些人想象的那樣從構造函數中「返回」零(構造函數實際上不會「返回」任何東西 - 賦值語法只是一種方便)。 –
嗯......我看到你跟這個問題中的人們說的一樣。 –
分配給自己是一個特例,通常你不需要這樣做,因爲它可能被認爲是一種不好的做法。然而,只有在使用非標準命名約定的情況下,使用Self作爲對類的引用纔是有用的。標準約定是使用F作爲類變量的前綴(FIsCorrect作爲示例)和A作爲過程/函數參數(AIsCorrect)。然後,類變量的賦值就像FIsCorrect:= AIsCorrect一樣簡單,或者如果function(procedure)參數爲:IsCorrect:Boolean,則需要使用Self.IsCorrect:= IsCorrect。 – too
- 1. Delphi:引用由TAutoObjectFactory創建的類實例
- 2. MediaInfoList實施例爲Delphi
- 3. 訪問Python中引用實例的實例
- 4. Delphi:管理TFrame的多個實例
- 5. Python中相互引用的實例
- 6. 類方法中的Ruby實例引用?
- 7. 如何在Delphi中實現引用計數的對象
- 8. 循環引用實例
- 9. Google應用引擎實例
- 10. 無法與實例引用
- 11. 引用當前RoleProvider實例?
- 12. 如何引用WebComponent實例?
- 13. 在Mootools中引用手風琴實例
- 14. 如何在Delphi Prism中使用interop實例化COM對象
- 15. 在python中引用當前實例中類的前一個實例
- 16. 我可以使用TVirtualMethodInterceptor實現實例計數監視嗎?使用Delphi XE引入的
- 17. Delphi中的索引順序?
- 18. 將對象實例轉換爲另一個實例的引用?
- 19. 如何使用實例索引的模塊實例?
- 20. 靜態實例變量引用類的實例
- 21. 實現在Delphi中Mediator模式沒有得到循環引用
- 22. Delphi接口中的引用計數
- 23. 解析Delphi中的XML引用
- 24. Delphi中的相互引用記錄(Win32)
- 25. Python的Namedtuple索引實例
- 26. Delphi中的Base32實現
- 27. Delphi中的實現PBKDF2?
- 28. 「C#中IEntityChangeTracker的多個實例無法引用實體對象」
- 29. 如何跟蹤delphi中某個類的實例數?
- 30. 在Delphi中創建自身實例的類函數
@AB - 「隱式自我」 - 自從我開始搞亂Python,在引用任何內部類成員時需要'self',我也開始在Delphi中做這件事 - 不確定我是否喜歡它,但不是風格上,但它似乎有助於更快地掃描代碼。 – Vector
@Mikey Delphi中的常用做法不是使用'self.'前綴。事實上,IDE intellisense允許您快速訪問屬性名稱,或者使用鼠標彈出提示或Ctrl + Click查看聲明 - 因此不需要指定此前綴。如果您沒有在您的代碼中定義全局變量(這是良好代碼所必需的),那麼您知道方法代碼中的標識符是屬性/方法名稱。因此,你不應該在你的方法中使用'self.'前綴(除非在'with'語句中)。 –
@AB - 我知道並同意你所說的一切,但這並不否定我使用它的理由。如果你想掃描/加速讀取一段代碼,'self'會有幫助 - 通常我喜歡坐下來閱讀代碼,而不用任何鼠標或交互,我還想打印出代碼並閱讀它。所以這是「自助」的方法....大聲笑 – Vector