2013-03-04 11 views
9

Qual è la differenza tra le seguenti dichiarazioni di S e F?Che differenza ha "var" sulle dichiarazioni di campo?

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

Il motivo che mi sto chiedendo è perché ho potuto usare S allo stesso modo di F (senza aggiungere la parola var).

Sono trattati in modo diverso?

risposta

13

Non c'è alcuna differenza. Secondo the documentation:

La parola chiave var è facoltativa. Tuttavia, se non viene utilizzato, tutte le dichiarazioni di campo devono essere eseguite prima di qualsiasi dichiarazione di proprietà o metodo . Dopo qualsiasi dichiarazione di proprietà o metodo, è possibile utilizzare la variabile per introdurre eventuali dichiarazioni di campo aggiuntive.

+0

"Quindi tutte le dichiarazioni di campo devono essere eseguite prima di qualsiasi dichiarazione di proprietà o metodo" ... Vorrei aggiungere "all'interno dello stesso blocco di visibilità". – jpfollenius

+0

Pensavo non ci fosse differenza. –

12

Sono entrambi campi con la stessa visibilità.

La parola chiave var è talvolta necessaria quando si dichiarano i campi dopo altre dichiarazioni (come costanti, tipi interni o anche dopo metodi e proprietà).

Ad esempio:

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; 

Il campo var è necessaria nel secondo caso (FSomeOtherField) per indicare al compilatore giunto una serie di dichiarazioni campi, ma nel primo caso non è necessaria per ragioni storiche , perché nelle prime versioni di Delphi è possibile dichiarare campi e non esiste supporto per tipi o costanti annidati.

+2

"come costanti o tipi interni" dovrebbe forse leggere "come metodi, proprietà, costanti o tipi interni". Anche se, in pratica, non ho mai visto campi * dopo * metodi e proprietà ... –

+0

@Andreas bel suggerimento, risposta modificata! :) – jachguate

Problemi correlati