C++で 'this'と同等のDelphiは何ですか?その使用例をいくつか教えてください。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
あなたが現在を指定したいときに使用しますオブジェクトを別のメソッドまたはオブジェクトに変換します。例えば
:この上記のコードはTMyClassインスタンスを指しList.Objects []と、TStrings
リストに項目を追加する
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;
。そして、それがこれがリストのすべての項目の場合に当てはまることを確認します。
デルファイでは、Selfはこれに相当します。また、hereに記載されているように割り当て可能です。
値に渡されるため、Selfに割り当てることはあまり役に立ちませんが、それは可能です。コンストラクタから何も返されない(実際にはコンストラクタは何も返さない - 代入構文は単なる利便性に過ぎない)。 –
ええと...私はあなたが連れているSOの質問の人々が同じことを言うのを見ます。 –
自己への割り当てはコーナーケースであり、通常、悪い習慣とみなされる可能性があるため、これを行う必要はありません。しかし、クラスへの参照としてSelfを使用することは、非標準の命名規則を使用している場合にのみ有効です。標準的な規則は、Fをクラス変数の接頭辞(例としてFIsCorrect)として使用し、Aを手続き/関数の引数(AIsCorrect)として使用することです。次に、クラス変数の割り当ては、FIsCorrect = = AIsCorrectと同じくらい簡単です。代わりに、関数(プロシージャ)引数がIsCorrect:Booleanの場合は、Self.IsCorrect:= IsCorrectを使用する必要があります。 – too
- 1. 同じ関数を値で参照してDelphiで参照する
- 2. Delphiのconstへの参照渡し
- 3. C#の - オブジェクト参照のインスタンス
- 4. 循環参照のインスタンス
- 5. インスタンスなしでクラス `type`を参照
- 6. インスタンス/参照をキャストしますか?
- 7. Visual Studio 2015でSQL Server 2014インスタンスを参照できますか?
- 8. Delphi検索パスとライブラリパスと参照パス
- 9. DelphiのC++参照パラメータと同等のものは何ですか?
- 10. 参照のクラスのインスタンスを渡すPython
- 11. 関連オブジェクトのインスタンスを参照する
- 12. Ecore Eclassesを参照しています。 xmlインスタンスからeClassを参照することは可能ですか?
- 13. 開始時の静的参照変数とインスタンス参照変数の違いは何ですか?
- 14. Pythonの現在のインスタンスでクラスの前のインスタンスを参照する
- 15. IEntityChangeTrackerの複数のインスタンスでエンティティオブジェクトを参照できません
- 16. IEntityChangeTrackerの複数のインスタンスでエンティティオブジェクトを参照できません
- 17. エラー "エンティティオブジェクトは、IEntityChangeTrackerの複数インスタンスで参照できません"
- 18. 元のタイプからのサービス参照インスタンスのインスタンスを作成しますか?
- 19. PowerShellのセットアイテムのリターンは、参照は、インスタンス
- 20. 現在のDjango HttpRequestインスタンスの参照
- 21. railsモデルのインスタンス変数の参照
- 22. MainWindowViewModelユーザーコントロールのViewModelインスタンスへの参照
- 23. オブジェクトを参照するインスタンス変数
- 24. Kotlinで外部クラスのインスタンスを参照する方法は?
- 25. C++異なるインスタンスの参照でミューテックスを渡す
- 26. クラスのSpEL参照インスタンス変数
- 27. Instanceメソッド参照インスタンス引数の場合
- 28. 直接的なJNDI参照のインスタンス化
- 29. @ContentChildの角2参照動的インスタンス
- 30. 参照関数定義内のGeneratorFunctionインスタンス
@AB - 「暗黙の自己」 - 内部クラスメンバーを参照するときに「自己」を必要とするPythonを使い始めたときから、私はDelphiでもこれをやり始めました。コードをすばやくスキャンすることができます。 – Vector
@Mikey Delphiの一般的なプラクティスは、 'self.'接頭辞を使用しないことです。実際、IDEインテリセンスを使用すると、プロパティ名に素早くアクセスしたり、マウスのポップアップヒントやCtrl +クリックで宣言を見ることができるため、この接頭辞を指定する必要はありません。コードにグローバル変数を定義していない場合(これは良いコードに必要です)、メソッドコード内の識別子がプロパティ/メソッド名であることがわかります。したがって、( 'with'ステートメント内でない限り)あなたのメソッドに' self.'接頭辞を使用しないでください。 –
@AB - あなたが言ったすべてを知っていますが、それはそれを使う理由を否定しません。コードをスキャンしてスピードを上げたい場合は、「自己」が役立ちます。座ったり、マウスやインタラクションを一切行わずにコードを読んだりするのが好きで、コードを印刷して読むだけです。 LOL – Vector