나에게 나쁜 디자인을 리팩터링하는 대신 뭔가를 해킹하기 위해 기본 클래스의 멤버를 숨기는 것보다 예외적 인 것처럼 들립니다 ...기본 클래스의 멤버가 코드의 악취를 숨기고 있습니까?
아마도 내가 틀 렸습니다. 하지만 ...
'new'키워드를 사용하여 기본 클래스의 멤버를 숨길 수 있습니까?
나에게 나쁜 디자인을 리팩터링하는 대신 뭔가를 해킹하기 위해 기본 클래스의 멤버를 숨기는 것보다 예외적 인 것처럼 들립니다 ...기본 클래스의 멤버가 코드의 악취를 숨기고 있습니까?
아마도 내가 틀 렸습니다. 하지만 ...
'new'키워드를 사용하여 기본 클래스의 멤버를 숨길 수 있습니까?
의도에 따라 다릅니다. 예를 들어 구체적인 리턴 유형을 명확히하는 것이 목적이라면, 그것은 비합리적이지 않을 수 있습니다. 여기에 고전적인 예가 DbConnection
입니다. 유용한SqlConnection
등을 DbCommand
이 아닌 SqlCommand
으로 다시 선언해야합니다. SqlCommand
에는 많은 고통을 줄 수있는 많은 플랫폼 관련 기능이 있기 때문에 다시 적용해야합니다. 중요한 점은, 여기서도 DbConnection
메서드가 여전히 작동하며 두 메서드의 용도와 의미가 동일하다는 것입니다.
나는 당신이 무슨 뜻인지 이해하지 못합니다. 코드 샘플을 줄 수 있습니까? –
나는 여기에서 혼란 스럽다. 기본 클래스에서 멤버를 새로 만들면 어떻게 될까? 왜냐하면 가상 클래스와 기본 클래스를 새로 만들 수 없기 때문입니다. 그냥 가상 또는 새로운. 기본 클래스에서 new를 사용하면 클래스를 파생시킬 때이 클래스를 재정의 할 수 없습니다. 전체적인 점을 어떻게 사용합니까? – Zenwalker
리 스콥 (Liskov) 치환 원리로 작업하는 한 전혀 문제가 없습니다! – MattDavey