2013-03-04 2 views
9

SF의 다음 선언의 차이점은 무엇입니까? 내가합니다 (var 키워드를 추가하지 않고) FS 같은 방법을 사용할 수 있기 때문에"var"는 필드 선언에 어떤 차이가 있습니까?

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

내가 부탁 해요 이유입니다.

그들은 다르게 취급합니까?

답변

13

전혀 차이가 없습니다. the documentation에 따르면 :

var 키워드는 선택 사항입니다. 그러나이 매개 변수를 사용하지 않으면 모든 필드 선언이 속성 또는 메서드 앞에 나타나야합니다. 선언. 속성 또는 메서드 선언 후 var는 을 사용하여 추가 필드 선언을 도입 할 수 있습니다.

+0

"그런 다음 모든 필드 선언은 속성 또는 메서드 선언보다 먼저 발생해야합니다"... 동일한 가시성 블록에서 "를 추가합니다". – jpfollenius

+0

아무런 차이가 없다고 생각했습니다. –

12

이들은 둘 다 가시성이 같은 필드입니다.

var 키워드는 다른 선언 (예 : 상수, 내부 형식 또는 메서드 및 속성 이후) 후에 필드를 선언 할 때 가끔 필요합니다. 예를 들어

:

var 필드는 이제 컴파일러에 지시 필드 선언의 시리즈를 제공하지만, 첫 번째 경우에이 역사적인 이유로 필요하지 않습니다하는 두 번째 경우 ( FSomeOtherField)에 필요한
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; 

왜냐하면 첫 번째 Delphi 버전에서는 Fields를 선언 할 수 있고 중첩 된 유형이나 상수를 지원하지 않기 때문입니다.

+2

"상수 또는 내부 유형과 비슷합니다"는 "메서드, 속성, 상수 또는 내부 유형과 비슷합니다"를 읽어야합니다. 실제로, 나는 필드 * 메서드와 속성을 본 적이 없지만 ... –

+0

@Andreas 좋은 제안, 답변 편집! :) – jachguate

관련 문제