2013-03-04 5 views
9

Was ist der Unterschied zwischen den folgenden Deklarationen S und F?Welchen Unterschied hat "var" bei Feldmeldungen?

type 
    TMyClass = class(TObject) 
    private 
    S: String; 
    private var 
    F: String; 
    end; 

Der Grund Ich frage, weil ich S die gleiche Art und Weise wie F nutzen konnte (ohne Zugabe des var Schlüsselwort).

Werden sie anders behandelt?

Antwort

13

Es gibt keinen Unterschied. Gemäss the documentation:

Das Schlüsselwort var ist optional. Wenn es jedoch nicht verwendet wird, müssen alle Felddeklarationen vor jeder Eigenschaft oder Methode Deklarationen auftreten. Nach jeder Eigenschaft oder Methodendeklaration kann die Variable verwendet werden, um zusätzliche Felddeklarationen einzuführen.

+0

"Dann müssen alle Felddeklarationen vor jeder Eigenschafts- oder Methodendeklaration auftreten" ... Ich würde "innerhalb desselben Sichtbarkeitsblocks" hinzufügen. – jpfollenius

+0

Ich dachte, es gibt keinen Unterschied. –

12

Sie sind beide Felder mit der gleichen Sichtbarkeit.

Das Schlüsselwort var wird manchmal benötigt, wenn Sie Felder nach anderen Deklarationen (wie Konstanten, innere Typen oder sogar nach Methoden und Eigenschaften) deklarieren.

Zum Beispiel:

type 
    TMyClass = class 
    private 
    FSomeField: string; //<--- this is a field, here you don't need the var clause 
    const 
     SOME_CONSTANT = 1; 
     OTHER_CONSTANT = 2; 
    var //<---- here you need the var clause to start declaring fields 
     FSomeOtherField: string; 
    end; 

Das var Feld ist im zweiten Fall (FSomeOtherField) benötigt, um den Compiler jetzt kommt eine Reihe von Feldern, Erklärungen zu unterweisen, aber im ersten Fall ist es nicht aus historischen Gründen erforderlich , denn in den ersten Delphi-Versionen können Sie nur Felder deklarieren und es gab keine Unterstützung für verschachtelte Typen oder Konstanten.

+2

"wie Konstanten oder innere Typen" sollte vielleicht "wie Methoden, Eigenschaften, Konstanten oder inneren Typen" lesen. Obwohl ich in der Praxis nie Felder * nach * Methoden und Eigenschaften gesehen habe ... –

+0

@Andreas netter Vorschlag, Antwort bearbeitet! :) – jachguate

Verwandte Themen