2010-08-19 7 views
10

저는 일반 연습에 대한 더 나은 이해를 얻으 려합니다 ... 특히 생성자에서 this()를 파생시킵니다. 나는 그 코드가 적다는 것을 이해하지만, 나는 그것을 덜 읽을 수 있다고 생각한다. 이런 식으로하는 것이 일반적/좋은 습관입니까? 아니면 구체적으로 처리하는 두 번째 생성자를 작성하는 것이 더 낫습니까? 모든 입력이 될 것: this() 생성자로

public SomeOtherStuff(string rabble) : this(rabble, "bloop") { } 

또는

Public SomeOtherStuff(string rabble) 
{ 
    //set bloop 
} 

크게

+3

'this()'는 구조체 타입에 자동 속성을 부여하고 매개 변수화 된 생성자로 설정할 수있는 좋은 방법입니다. 'this()'가 없으면 명시적인 후행 (backing) 필드를 사용해야합니다. –

+0

@ Dan : 멋지다. 나는 그런 생각을하지 못했다.앞으로 자동 속성을 가진 구조체에서'this()'를 사용할 것이다! 감사! – Timwi

답변

17

가능한 경우 this()을 사용하는 것이 좋습니다. 그렇지 않으면 DRY (Do not Repeat Yourself) 원칙을 위반하는 일부 코드를 복제하게됩니다. 여러 곳에서 같은 변화를 만들기 위해를 기억하고 복수를 유지하면 에있다 - 그것은 단 한 줄의 코드에 대한 간단한 변경하더라도 - 자신을 반복의 문제는 때마다 당신이 변화를 만들 필요가있다 복사본이 동기화되었습니다.

코드가 달라야하므로 더 이상 복제 할 필요가 없기 때문에 코드를 "복제"해야합니다. 이렇게하면 코드가 실제로는 다르다는 것을 독자에게 알리는 메시지가 중복되는 것이므로 이유가 있습니다.

+0

위대한 대답은 분명히 제 질문을 명확히 해줍니다. DRY 원칙을 보지 못했지만 전반적으로 내 코드가 개선 될 것이라고 생각합니다. 감사! – Aardvark

0

내가 신뢰성에 대한 가독성 등에 대해 덜 신경을 감사합니다.

연결 생성자는 copypasting 생성자 메서드 본문보다 훨씬 좋습니다.

+4

체인 생성자가 코드 복사보다 낫다는 것에 동의합니다. 그러나 해독 성은 매우 중요합니다. 이 예에서는 체인 생성자가 더 읽기 쉽고 훨씬 안정적이라고 생각합니다. 그러나 일반적인 성명서에서 가독성에 대해 "신경 쓰지 않는"것은 위험한 실습 IMO입니다. –

+1

@foo 버기 쉽고 읽기 쉽거나 애매하지만 신뢰할 만합니까? 물론, 그것도 항상/또는 상황이 아니지만, 당신이 하나 또는 다른 것을 할 수있는 선택이 있다면, 다른 하나를 더 좋게하십시오. 또한 가장 읽을 수없는 코드는 코드 주석의 적용으로 이해하기가 쉽습니다! – Will

+0

어, 왜 "버기"를 "읽을 수있는"것과 연관 시키니? "읽기 쉽고 신뢰성있는"방법은 어떻습니까? 그것들은 상호 배타적이지 않습니다. –

1

이렇게하면 생성자를 체인화하는 방법을 사용하는 것이므로 완벽하게 유효합니다.

7

개의 별도 생성자의 문제점들은 종종 생성자를 변경하고, 다른되지 리팩토링 나중에 문제를 초래할 수있다 동일한 코드를 포함한다는 것이다. 따라서 this()를 가진 생성자 연결을 DRY principle의 응용 프로그램으로 볼 수 있습니다.

2

초기화 목록은 업계에서 매우 일반적으로 사용됩니다.

가독성에 관해서는 의견의 문제입니다. 그러나 유지 보수 가능성은 보통 더 높은 목표를 위해 노력합니다.

DRY

좋은 일이 :)

1

나는 정말 첫 번째 방법 (생성자 체인) 등이지만, 두 번째 방법은 더 읽을 생각한다면 그 가서 당신은 당신이에있는 중복 어떤 코드를 넣을 수 있습니다 사람들이 언급 한 DRY 원리를 깨뜨리는 것을 피하기 위해 개인적인 방법으로 생성자를 사용합니다.

또한, 나 또한 항상 내가 일하고 있어요 코드의 스타일로 코드를 시도 - 지배적 인 스타일은 하나 또는 다른, 나는 일관성이 스타일로 갈 것입니다 그렇다면.

0

예를 Init(rabble, bloop) 모든 생성자를 들어, 초기화 방법을 쓰고 건조하는 또 다른 방법은이 방법을 호출합니다.

이것은 특히 생성자가 많은 곳에서는 덜 혼란스럽고 유연합니다.

관련 문제