2012-02-27 3 views
2

나에게 나쁜 디자인을 리팩터링하는 대신 뭔가를 해킹하기 위해 기본 클래스의 멤버를 숨기는 것보다 예외적 인 것처럼 들립니다 ...기본 클래스의 멤버가 코드의 악취를 숨기고 있습니까?

아마도 내가 틀 렸습니다. 하지만 ...

'new'키워드를 사용하여 기본 클래스의 멤버를 숨길 수 있습니까?

+1

나는 당신이 무슨 뜻인지 이해하지 못합니다. 코드 샘플을 줄 수 있습니까? –

+0

나는 여기에서 혼란 스럽다. 기본 클래스에서 멤버를 새로 만들면 어떻게 될까? 왜냐하면 가상 클래스와 기본 클래스를 새로 만들 수 없기 때문입니다. 그냥 가상 또는 새로운. 기본 클래스에서 new를 사용하면 클래스를 파생시킬 때이 클래스를 재정의 할 수 없습니다. 전체적인 점을 어떻게 사용합니까? – Zenwalker

+0

리 스콥 (Liskov) 치환 원리로 작업하는 한 전혀 문제가 없습니다! – MattDavey

답변

4

의도에 따라 다릅니다. 예를 들어 구체적인 리턴 유형을 명확히하는 것이 목적이라면, 그것은 비합리적이지 않을 수 있습니다. 여기에 고전적인 예가 DbConnection입니다. 유용한SqlConnection 등을 DbCommand이 아닌 SqlCommand으로 다시 선언해야합니다. SqlCommand에는 많은 고통을 줄 수있는 많은 플랫폼 관련 기능이 있기 때문에 다시 적용해야합니다. 중요한 점은, 여기서도 DbConnection 메서드가 여전히 작동하며 두 메서드의 용도와 의미가 동일하다는 것입니다.

당신이이 일을하는 경우와 방법 뭔가 다른, 또는 다른 반환 뭔가를, 다음은 혼란을 일으킬 수있는 경우가있다. 그리고 그것은 여전히 ​​의미가있을 수 있습니다. p 똑같은 일을하는 사람들은 호출자에게 유용한 구현에 대해 공식적으로 말하면서 만 달라집니다.

관련 문제