2013-06-12 2 views
0

에 괄호가 필요합니까 왜 그러나이 속성내가 속성

/// <summary> 
    /// The production date of the device is contained in its serial number. 
    /// </summary> 
    public DateTime Date 
    { 
     get 
     { 
      return SerialNumber.Date; 
     } 
    } 

을 가지고, 내가이

/// <summary> 
    /// The production date of the device is contained in its serial number. 
    /// </summary> 
    public DateTime Date 
    { 
     get return SerialNumber.Date; 
    } 

처럼 쓸 수있는 기대하지만 오류 { or ; expected을받을 수 있습니다.

이제 내 질문에 : 코드의 한 줄 밖에 없으므로 범위의 시작과 끝을 표시하지 않으려는데 왜 여기에 중괄호가 필요합니까?

중괄호를 사용해야한다는 것은 중요하지 않습니다. 하지만 제 의견으로는 C# 코드의 나머지 해석과 일관성이 없습니다.

예를 들어 if(DoNotUseBraces) return null;을 사용할 수 있습니다. 중괄호는 필요하지 않습니다. 또는 심지어

if (SomeBoolean) 
    return null; 

다시 말하지만, 중괄호는 필요하지 않습니다. 나는 그것과 같은 것 같아 : Why do methods with only one statement need braces?하지만 get은()와 같은 get() 같은 구현하지 않습니다.

+1

클래스와 메소드에는'try' /'catch' /'finally'와 몇 가지 다른 단점이 있기 때문에 중괄호가 필요합니다. 구조체. 이러한 사물 뒤에는 거의 이유가 거의 없습니다. (그리고 코딩 규칙을 준수하면 이러한 특질을 어리석은 곳으로 만들 수 있습니다.) – Joey

답변

3

해당 대괄호는 범위 블록 용이 아니며 구문의 일부입니다. setter 및 getter는 실제로 메서드이므로 함수의 구문과 비슷합니다.괄호는, 구문의 일부

if (<condition>) <statement> 

속성 게터입니다 : 그들은을 위해 단지로

<type> <identifier> { get { <statements> } } 

if 문에 대한

괄호 구문의 일부가 아닌 함수 :

<type> <identifier>(<parameters>) { <statements> } 
+0

'+ 1' &'대답 수락 '은 간결하고 정확한 답변입니다. –

1

이것은 언어 설계에 불과하므로 그러한 방식으로 간주됩니다. 그것은 램 보르 기니 자동차가 다른 자동차와 마찬가지로 위로 열리는 문을 가지고 있다는 사실에 관한 것입니다. 언어 디자인에 관한 것입니다. C#에서 속성 또한 세터를 가질 수 있기 때문에

Why this compile error

+0

내게는 위쪽으로 열리는 문 하나와 옆으로 열리는 문 하나가있는 람보르기니 자동차의 구현 (귀하의 예를 든다)과 더 비슷하게 보입니다. –

+0

@MikedeKlerk : 아니오, 제공되는 링크를 살펴보십시오. – Tigran

+0

방금 ​​읽었습니다. 매우 정확한 정보가있는 링크는 +1입니다. –

3

이 설명 언어 사양의 정확한 위치를 가리키는이 질문에 대한 전체 존 소총의 답변

는에 모습을 가질 수 있습니다 :

public DateTime Date 
{ 
    get return SerialNumber.Date; 
    set SerialNumber.Date = value; 
} 

그래도 작동하지 않습니다. getter는 어디에서 끝나고 setter는 어디에서 시작합니까? 이제 내 질문은

public DateTime Date 
{ 
    get { return SerialNumber.Date; } 
    set { SerialNumber.Date = value; } 
} 
: 이유는 무엇 에 원하지 않는 동안, 여기에 괄호를 필요로하는 시작과 끝을 표시 할 여러 행을 추가하려는 경우에도

이 범위

은 명확하다 범위의 코드는 코드 한 줄만 있으므로

필자는 C# 컴파일러 팀이 하나의 라이너 속성에 적합한 것을 구현하는 것은 너무 많은 작업이었다고 가정합니다.

+0

'getter는 어디에서 끝나고 setter는 어디에서 시작하나요? '라고 한 줄에 그 문제는 보이지 않습니다. –