현재 C #을 마스터하는 중이므로 Gary McLean Hall의 C # 을 통해 Adaptive Code를 읽고 있습니다.
그는 패턴과 반 패턴에 대해 씁니다. 구현 대 인터페이스 부분에서 그는 다음과 같이 씁니다.
인터페이스 프로그래밍 개념에 익숙하지 않은 개발자는 종종 인터페이스의 배후에있는 것을 놓기가 어렵다.
컴파일 타임에 인터페이스의 모든 클라이언트는 사용중인 인터페이스의 구현을 모릅니다. 이러한 지식은 클라이언트를 인터페이스의 특정 구현에 연결하는 잘못된 가정으로 이어질 수 있습니다.
클래스가 영구 저장소에 레코드를 저장해야하는 일반적인 예를 상상해보십시오. 이를 위해 사용 된 영구 스토리지 메커니즘의 세부 사항을 숨기는 인터페이스에 올바르게 위임합니다. 그러나 어떤 인터페이스 구현이 런타임에 사용되고 있는지에 대한 가정은 옳지 않습니다. 예를 들어, 인터페이스 참조를 구현에 캐스트하는 것은 항상 나쁜 생각입니다.
언어 장벽이거나 경험이 부족할 수 있지만 그 의미를 이해하지 못합니다. 내가 이해하는 것은 다음과 같습니다.
C #을 연습 할 자유 시간 재미있는 프로젝트가 있습니다. 거기에는 수업이 있습니다.
public class SomeClass...
이 수업은 많은 장소에서 사용됩니다. C #을 배우면서 인터페이스를 사용하여 추상화하는 것이 더 낫다는 것을 읽었습니다.
public interface ISomeClass <- Here I made a "contract" of all the public methods and properties SomeClass needs to have.
public class SomeClass : ISomeClass <- Same as before. All implementation here.
그래서 나는 모든 클래스 참조에 들어가서 ISomeClass로 대체했습니다.
내가 쓴 구성을 제외하고 :
ISomeClass myClass = new SomeClass();
이것이 잘못되었음을 올바르게 이해하고 있습니까? 그렇다면 왜 그렇습니까? 대신 어떻게해야합니까?
ISomeClass myClass = new SomeClass();
합니까? 만약 당신이 정말로 그것을 의미한다면, 그것은 당신이 원하는 것이 아니라 생성자에서의 재귀입니다. 희망적으로 당신은"건설 ", 즉 생성자 자체가 아닌 할당, 즉 아마도 의미합니다. ?
ISomeClass
하지만 잘 일어날 수 있음 ) . 유일한 옵션에 대해 유용한 코드를 작성할 수 없는 너무 일반적인 인터페이스를 만드는 것도 쉽습니다 인터페이스를 다시 생각하고 코드를 다시 작성하거나 다운 캐스트해야합니다.