2009-06-26 6 views
12

이것이 주관적인 질문이지만 항상 코딩 스타일의 모범 사례에 대해 궁금합니다. ReSharper에서 4.5 내가이 "적은 더"감사 드리며가독성을 위해 좋을지라도 "기본"악습을 사용하고 있습니까?

base.DoCommonBaseBehaviorThing(); 

은 정신, 나 또한 시간 디버깅을 많이 소비 한 구현 클래스, 즉 기지 메소드 호출하기 전에 나에게 키워드 "기본"에 대한 경고를주고있다/고도로 연결된 응용 프로그램을 유지 관리하고, 구성원 호출이 기본 객체를 보는 것만으로 알 수있는 것처럼 느낄 수 있습니다. ReSharper의 규칙을 변경하는 것은 간단 합니다만, 어떻게 생각하니? 기본 멤버에게 전화 할 때 "기본"을 사용해야합니까?

+12

귀하의 모든 자료는 저희에게 귀속되어 있습니다. – JoelFan

+0

IMHO 미래의 독자 (개발자)가 좋은 가독성을 생각하는 것에 달려 있습니다. 그들에게 물어보고 "누가 코드를 유지할 것인가에 달렸습니다."라는 질문에 대답하십시오. – LosManos

답변

21

base.MethodCall();을 사용해야하는 유일한 경우는 자식 클래스에서 같은 이름의 메서드를 재정의했지만 실제로 부모에서 메서드를 호출하려고 할 때입니다.

다른 모든 경우에는 MethodCall();을 사용하십시오. thisbase 같은

키워드 코드를 더 쉽게 읽을 수 있도록하지 않고 그들이 필요하지 않는 모든 경우 피해야한다 - 그런 내가 위에서 설명한 경우와 같이.

+4

+1. 멀티 버튼은 어디에 있습니까? –

+3

"코드를 더 읽기 쉽고 피하지 말아야합니다."적어도 주관적인 태그가 설정되어 있습니다. –

+0

@Matthew Whited, 좋은 지적입니다. 읽기 쉽거나 개인적인 것은 아닙니다 ... 실제로 PERL을 주장하는 사람들이 있습니다 읽을 수 있습니다. –

3

정말 개인적인 취향의 문제입니다. 당신이 "기지"를보고 싶다면. 회원 초기에 규칙 (옵션> 검사 심각도> 코드 중복> 중복 '기본'한정자로 이동)을 쉽게 끌 수 있습니다. 비 행동 정적 코드 분석 규칙이 원하는 코딩 스타일에 영향을 미치지 않도록하십시오. 고려해야 할

편집

것은 정적의 FxCop 코드 분석 및 R 번호 가능한 모든 요구에 대한 규칙이 제공 할 수 있다는 것입니다. 실제로는 을 준수하는 동시에 모든 규칙은입니다. 조금 번거로우 시겠지만. 원하는 코딩 스타일을 정의해야합니다 (팀에서 일하는 경우 전체적으로 수행하십시오). 코딩 표준과 일치하도록 규칙을 수정하십시오. 반대의 경우도 마찬가지입니다.

+0

나는 이것이 코딩 스타일 또는 개인적인 선호라고 말하지 않을 것이다. base.SomeMethod()에 대한 호출과 SomeMethod()에 대한 호출은 일부 경우에 동일한 효과를 줄 수 있지만 두 호출은 근본적으로 다를 수 있습니다. – BlackWasp

+0

그 시나리오에서, 당신 말이 맞아요. 나는 정적 코드 분석이 "기반"을 표시하는 경우를 언급했다. 중복되는 것으로. 귀하의 예에서는 플래그가 지정되지 않았을 것입니다. –

4

일반적으로 이전 기능을 무시할 때만 base을 사용해야한다고 생각합니다.

일부 언어 (C#은 해당하지 않음)는 Foo.common() (물론 Bar 어딘가에서 호출 됨)과 같은 기본 클래스 이름으로 함수를 호출하여이 기능을 제공합니다.

이렇게하면 체인에서 위쪽으로 건너 뛰거나 다중 상속의 경우 여러 구현에서 선택할 수 있습니다.

본인이이 클래스에서 해당 기능을 재정의했기 때문에 명시 적으로 부모 기능을 호출해야하는 경우에만 기본 코드를 사용해야한다고 생각합니다.

6

고려해야 할 또 다른 중요한 점은 현재 전화를하지 않고 모든 통화를 기본으로 지정한다는 의미는 아닙니다. 모든 통화에 대해 찾기 및 바꾸기를 수행하지 않고도 새 기능을 사용할 수는 없습니다.

전화를 거는 중에. 범위의 두 변수가 같은 이름을 가진 상황을 무시하고 가독성을 높이거나 낮추는 것 외에는 아무 것도하지 않습니다. 접두어는 많은 일반적인 시나리오에서 작성한 코드의 기능을 변경합니다. 그래서 저는 기지를 추가하지 않을 것입니다.이 필요하지 않으면이 필요합니다.

16

잘 모르겠다. 은 나쁜 습관이다. 베이스이지만, 은 좋거나 나쁘지는 않지만 의미 체계의 문제는입니다. 은 다형성입니다. 즉, 기본 클래스에 속한 메서드를 사용하더라도 재정의 된 메서드 인 이 사용되지 않습니다. 베이스은 항상 호출하는 메소드의 기본 클래스에 정의 된 메소드를 참조하므로, 다형성이 아닌입니다. 이것은 엄청난 의미 차이입니다. 그런 다음 베이스을 사용해야합니다. 방법으로 사용하려면 베이스을 사용하십시오. 호출을 다형성으로 유지하려면 베이스을 사용하지 마십시오.

+2

다음을 추가하고 싶습니다. 나중에 불필요하게 기본 클래스를 사용하여 클래스의 메서드를 재정의하면 코드에서 기본 메서드를 호출하고 방금 재정의 한 코드를 호출하지 않습니다. –