2012-03-28 3 views
3

때로는 기본 클래스의 메서드를 재정의합니다. 때로는 비어있는 메서드로 재정의하는 경우도 있습니다. 왜냐하면 내가 원하는 것은 비헤이비어를 막는 것입니다. 과거 C#에서 재정의/주석 처리하는 방법은 무엇입니까?

나는 기본 방법 우회의 의도를 보여주기 위해 다음처럼 작성할 수

:

protected override void OnMouseUp(MouseEventArgs e) 
{ 
    // base.OnMouseUp(e); 
} 

(나는 코드의 주석 줄 알고 나쁜 일이 내가 을 사용했다. 그것을 할)

그러나 나는 더 잘 할 싶어 : 나는 거라고 어떻게

  • 을 오버라이드의 의도를 확인 하는가? 구체적으로 :
  • 재정의 XML (? ) 문서에는 무엇을 적 으시겠습니까?
+1

http://en.wikipedia.org/wiki/Liskov_substitution_principle – Eva

+0

@Eva 나는 당신이 의미하는 바를 잘 모릅니다. 이 기사를 빨리 읽은 후에, 나는 기본 클래스의 행동을 막아서는 안된다는 말을 듣고있다. –

+0

[여기] (http://stackoverflow.com/questions/56860/what-is-the-liskov-substitution-principle) 그게 더 나은 설명하는 질문입니다. 기본적으로 하위 클래스는 상위 클래스의 invariant를 위반해서는 안됩니다. 하위 클래스는 기능을 추가하거나 기능을 변경하거나 제거하지 않아야합니다. 일반적으로 하위 클래스가 LSP를 위반하면 컴포지션 상황이 발생하는 것입니다. – Eva

답변

3

그것을 다시 복원

// This method is intentionally blank because 
// we do not want the base class functionality 

같은 의견은 당신이 무슨 짓을했는지 왜 그랬는지 첫 번째 댓글이 명확하게 명시

// base.SomeMethod(); 

보다 훨씬 더, 다음 개발자는 누가 원을 따라 온다 기본 메서드에 대한 호출이 실수로 주석 처리되었는지 궁금하지 않아도됩니다.

기본 클래스를 제어 할 수있는 경우 해당 메서드를 제거하고 클래스를 더 추상화하는 것이 좋습니다. 그런 다음 필요에 따라 하위 클래스에서만 해당 기능을 구현하도록 선택할 수 있습니다.

+0

메소드 본문에서 그렇게 할 계획입니다. 그러나 XML 문서는 어떻습니까? –

+1

XML 문서에서 다시 말하면됩니다. 필요한 경우 기본 클래스를 재정의하는 이유를 다시 설명 할 수 있습니다. 일반적으로, "OnMouseUp"이라는 메서드는 꽤 자명하며 많은 헤더 문서를 필요로하지 않을 것이라고 생각합니다. 이것은 돌로 쓰여진 것이 아니지만 나에게있어서 XML 주석은 보통 "무엇"을하는지 말해주고, 메소드 내의 주석은 "왜"내가하고있는 일을 하는지를 말해 준다. –

+0

감사합니다. 안심이됩니다. XML 주석에 대해 할 일에 대해 처음 언급 한 사람은 대답을 받아들입니다. –

1

기본 클래스 호출에 대한 의견은 제 생각에는 의도를 분명히하는 것과 정반대입니다. 사람들은 주석 처리 된 행이 왜 여전히 존재하는지, 그리고 사용자가 삭제하지 않았기 때문에 여전히 사용 가능할지 궁금해 할 것입니다. 그래서 내가 주석으로 처리 된 라인을 제거합니다.

다른 방법과 마찬가지로 오버라이드를 문서화 할 수 있으며 설명서에서 비어있는 이유를 정확하게 지정하십시오. 메서드 본문에 이유를 주석으로 쓸 수도 있습니다. 그게 선호 사항의 문제입니다.

이 정보가 코드를 유지 관리하는 개발자 또는 코드 사용자 (예 : 사용자)에게만 중요하다고 생각합니다. 일반적으로 운영 체제에서만 호출되는 이벤트의 경우 (예에서와 같이) 요약 태그에 넣는 것은 실제로 필요하지 않습니다.

여전히 기본 클래스의 동작을 비활성화하는 메서드를 재정의해야하는 경우 디자인의 해당 부분을 다시 고려해야합니다. 그 행동은 나에게 조금 비현실적 인 것처럼 보입니다. 난 그냥

protected override void OnMouseUp(MouseEventArgs e) 
{ 
    // not calling the base implementation 
    ... 
} 

처럼

// base.OnMouseUp(e); 

가 만드는 라인을 코멘트를 넣어 것입니다 의도를 명확히 들어

/// <summary>Exiting drag mode on mouse up</summary> 
protected override void OnMouseUp(MouseEventArgs e) 
{ 
    ... 

:

+0

주석 처리 된 코드 줄을 사용하는 것이보기 흉한 것에 동의합니다. 나는 개인 코드 였기 때문에 단지 그렇게했고, 신경 쓰지는 않았지만 다른 개발자에게 왜 그것이 재정의되었는지 알고 싶습니다. 왜 내가 '

'태그에서 오버라이드 된 것일까 요? –

+0

방금 ​​다시 생각해 봤는데 방법에 달려 있다고 생각합니다. 내 업데이트 답변을 참조하십시오. – Botz3000

+0

나만의 것인지 모르겠지만 내 자신의 클래스의 메서드를 재정의 할 필요가 없었으며 원래 개발자와 동의하지 않는 코드 사용자에게만 유용하다고 간주되었습니다. 내 생각에 디자인). 나는 방금 다른 대답을 받아 들였지만 편집은 중요한 점을 제기했기 때문에 +1합니다. –

5

문서에 대해서는, 난 그냥 built-in documentation tags을 사용 전화가 일시적으로 주석 처리되었다는 인상 (아마도 누군가 잊어 버렸습니다.)

+0

예, 코드를 주석 처리하는 것이 좋지 않다는 점에 동의합니다. 그러나 XML 문서에서 해당 동작을 취소하거나 변경하기 위해 상속되었다고 명시되어서는 안됩니까? –

+1

@Camilo : 글쎄요. 클래스의 _users_가이 세부 사항을 알기 쉽도록/좋고/중요하다고 생각하면 문서에 넣으십시오. 이 정보가 클래스의 _developers_에 대해서만 흥미로운 경우 메소드 내부에 주석으로 남겨 둡니다. – Vlad