2013-05-07 2 views
0

선언의 Method1과 Method2의 차이점은 무엇입니까?변수 초기화

방법 항목

private readonly CategoryBusiness _categoryBusiness = new CategoryBusiness(); 

방법 2

private readonly CategoryBusiness _categoryBusiness; 

public CategoryController() : this(new CategoryBusiness()) 
{ 

} 

public CategoryController(CategoryBusiness categoryBusiness) 
{ 
    _categoryBusiness = categoryBusiness; 
} 

업데이트 : 내 정확한 질문은

내가 같이 선언에서 같은 읽기 전용 필드를 초기화된다 동일한 값으로 생성자에서 nitializing?

+0

첫 번째 메서드는 새 개체를 선언하고 두 번째 메서드는 매개 변수를 변수로 전달한 다음 매개 변수로 선언합니다. – jAC

+2

수수께끼입니까? 퀴즈? 우리는 어디에서 답을 보낼 수 있습니까? 우리는 무엇을 얻을 수 있습니까? 나중에 방문자에게 도움이되는 의미있는 질문을하십시오. 이제 C# 설명서를 복사 해달라고 요청하는 것입니다. – CodeCaster

+1

@ CodeCaster, C# 설명서에서 내 질문에 대한 대답 링크를 제공 할 수 있습니까? 나는 항상 여기에 질문을 제기하기 전에 먼저 Google에 사용합니다 ....감사합니다 ... –

답변

5

동일, readonly 필드는 선언 또는 생성자로 값을 할당 할 수 있습니다. 선언에 의해 도입 된 필드 만 선언의 일부 또는 동일한 클래스 생성자 발생할 수

필드 선언 판독 전용 개질제를 포함

readonly (C# Reference)

, 할당.

생성자를 통해 초기화하면 개체를 초기화하는 동안 필드에 값을 할당하는 이점이 있습니다.

(LukeHennerley의 주석으로) 읽기 전용 키워드는 const 키워드는 다르다. const 필드는 필드 선언시에만 초기화 될 수 있습니다. readonly 필드는 선언시 또는 생성자에서 초기화 할 수 있습니다. 그러므로 읽기 전용 필드는 사용 된 생성자에 따라 값이 다를 수 있습니다..

+0

+1 감사합니다. 읽기 전용없이 어떤 차이가 있습니까? –

+0

+1 :) 할당은 동일하지만 할당 전에 전달 된 객체를 수정할 수 있다는 점에서 생성자에서 좀 더 제어 할 수 있습니다. – LukeHennerley

+0

@SSS,'readonly'없이 그대로 둔 채로 초기화 할 수 있습니다. 하지만'readonly'으로 선언이나 생성자에서 초기화해야합니다. – Habib

0

분명히 방법 2는 방법 1은 그렇지 않지만 생성자에서 CategoryBusiness 개체를 지정할 수 있습니다.

0

무언가를 고정 값으로 초기화한다는 점에서 동일합니다. 그러나 후자는 누군가가 다른 인스턴스를 지정할 수있게 해주는 점에서보다 융통성이 있으며, 특히 하위 클래스에 유용 할 수 있습니다.

0

첫 번째는 생성자가 호출되기 전에 _categoryBusiness에 값을 할당합니다 (따라서 생성자에서 right를 사용할 수 있습니다). 두 번째 것은 생성자에서 _categoryBusiness에 값을 할당하므로이 할당 후에 만 ​​사용할 수 있습니다. 두 번째 장점은 호출 코드에서이 읽기 전용 값을 변경할 수 있다는 것입니다. 첫 번째 이점은 실제로 읽기 전용이라는 것입니다.