다음을 통해 공유


명시적으로 인터페이스 멤버 구현

인터페이스는 일부 기능을 지원하기 위한 계약입니다. 인터페이스를 구현하는 클래스는 인터페이스에 지정된 멤버에 대한 구현 세부 사항을 제공해야 합니다. 예를 들어, IEnumerator 인터페이스는 컬렉션과 같이 개체 집합에 대한 열거를 지원하기 위해 구현해야 하는 멤버 시그니처를 정의합니다. IEnumerator를 구현하려면 클래스가 Current, MoveNextReset 멤버를 구현해야 합니다.

인터페이스 멤버가 클래스에 의해 명시적으로 구현되는 경우 이 멤버는 해당 인터페이스에 대한 참조를 사용하여 액세스해야 합니다. 이렇게 하면 인터페이스 멤버가 표시되지 않습니다. 인터페이스 멤버를 명시적으로 구현하는 가장 주된 이유는 인터페이스의 계약을 준수하고 특정 방법으로 해당 계약을 개선하기 위해서입니다. 예를 들어, 약한 형식의 인터페이스 메서드 대신 사용해야 하는 강한 형식의 메서드를 제공할 수 있습니다. 일반적으로 개발자가 명시적 인터페이스 멤버를 호출하면 안 되는 경우에도 인터페이스 멤버를 명시적으로 구현해야 합니다. 예를 들어, GetObjectData 멤버는 코드가 아닌 serialization 인프라에서 호출되므로 일반적으로 명시적으로 구현됩니다.

다음 디자인 지침은 라이브러리 디자인에서 반드시 필요한 경우에만 명시적 인터페이스 구현을 사용하도록 하는 데 도움이 됩니다.

반드시 필요한 경우에만 인터페이스 멤버를 명시적으로 구현합니다.

명시적 구현을 이해하려면 높은 수준의 전문 지식이 필요합니다. 예를 들어, 해당 시그니처가 전용 시그니처인 경우에도 명시적으로 구현된 멤버를 공개적으로 호출할 수 있다는 사실을 모르는 개발자도 많이 있습니다. 이로 인해 공개된 멤버 목록에 명시적으로 구현된 멤버가 표시되지 않습니다. 또한 멤버를 명시적으로 구현하는 경우 불필요하게 값 형식이 boxing 형식이 될 수도 있습니다.

인터페이스를 통해서만 멤버를 호출하려는 경우 인터페이스 멤버를 명시적으로 구현할 수 있습니다.

여기에는 데이터 바인딩 또는 serialization과 같은 .NET Framework 인프라를 지원하는 멤버가 주로 포함됩니다. 예를 들어IsReadOnly속성은 ICollection<T> 인터페이스에 대한 참조를 사용하여 데이터 바인딩 인프라에서만 액세스할 수 있습니다. List<T> 클래스는 이 지침을 따르므로 속성을 명시적으로 구현합니다.

가변성을 시뮬레이션하기 위해 인터페이스 멤버를 명시적으로 구현합니다. 즉, 재정의된 멤버의 반환 형식이나 매개 변수를 변경합니다.

이 작업은 일반적으로 인터페이스 멤버의 강력한 형식의 버전을 제공하기 위해 수행됩니다.

멤버를 숨기고 보다 나은 이름을 사용하여 동일한 멤버를 추가하기 위해 인터페이스 멤버를 명시적으로 구현할 수 있습니다.

이를 통해 멤버의 이름을 효과적으로 바꿀 수 있습니다. 예를 들어, StreamDispose를 명시적으로 구현하고 해당 위치에 Close 메서드를 제공합니다.

명시적 멤버를 보안 경계로 사용하지 않습니다.

멤버를 명시적으로 구현하는 경우에는 보안이 제공되지 않습니다. 이러한 멤버는 인터페이스에 대한 참조를 사용하여 공개적으로 호출할 수 있습니다.

해당 기능이 파생된 클래스에 의해 특수화되는 경우 명시적으로 구성된 멤버와 동일한 기능을 제공하는 보호된 가상 멤버를 제공합니다.

명시적으로 구현된 멤버는 재정의할 수 없습니다. 이러한 멤버가 파생된 클래스에 재정의되는 경우 파생된 클래스에서 기본 클래스 구현을 호출할 수 없습니다. 명시적 인터페이스 멤버와 동일한 이름을 사용하거나 인터페이스 멤버 이름에 Core를 추가하여 보호된 멤버의 이름을 지정해야 합니다.

Portions Copyright 2005 Microsoft Corporation. All rights reserved.

Portions Copyright Addison-Wesley Corporation. All rights reserved.

디자인 지침에 자세한 내용은 참조를 "Framework 디자인 지침: 규칙, 숙어, 및 재사용에 대 한 패턴입니다.NET 라이브러리"도 서 Krzysztof Cwalina와 Brad Abrams, 게시 Addison-wesley, 2005.

참고 항목

개념

인터페이스 디자인

기타 리소스

멤버 디자인 지침

클래스 라이브러리 개발을 위한 디자인 지침