2013-03-04 6 views
9

Jaka jest różnica między następującymi deklaracjami S i F?Jaką różnicę ma "var" na deklaracjach polowych?

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

Powodem Pytam dlatego, że mogłem użyć S w ten sam sposób jak F (bez dodawania słowa kluczowego var).

Czy są one traktowane inaczej?

Odpowiedz

13

Nie ma żadnej różnicy. Według the documentation:

Słowo kluczowe var jest opcjonalne. Jeśli jednak nie zostanie użyty, wszystkie deklaracje pola muszą pojawić się przed deklaracjami właściwości lub metod. Po każdej deklaracji właściwości lub metody, var może zostać użyty do wprowadzenia jakichkolwiek dodatkowych deklaracji pól.

+0

"Zatem wszystkie deklaracje pola muszą wystąpić przed deklaracjami właściwości lub metod" ... Dodałbym "w ramach tego samego bloku widoczności". – jpfollenius

+0

Myślałem, że nie ma różnicy. –

12

Oba są polami o tej samej widoczności.

Słowo kluczowe var jest potrzebne czasami, gdy deklarujesz pola po innych deklaracjach (jak stałe, typy wewnętrzne, a nawet po metodach i właściwościach).

Na przykład:

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; 

Pole var jest potrzebna w drugim przypadku (FSomeOtherField) poinstruować kompilator teraz przyjść szereg deklaracji pól, ale w pierwszym przypadku nie jest to konieczne ze względów historycznych , ponieważ w pierwszych wersjach Delphi można po prostu zadeklarować Fields i nie było obsługi zagnieżdżonych typów lub stałych.

+2

"jak stałe lub wewnętrzne typy" powinny być prawdopodobnie czytane "jak metody, właściwości, stałe lub typy wewnętrzne". Chociaż w praktyce nigdy nie widziałem pól * po * metodach i właściwościach ... –

+0

@Andreas nice sugestia, odpowiedź edytowana! :) – jachguate

Powiązane problemy