2009-12-03 10 views

답변

8

(개인적으로) 동일한 서명이있는 메소드간에 충돌이있을 때만 명시 적 구현이 필요합니다.

예를 들어 IEnumerable<T>을 구현할 때 반환 유형을 제외하고 동일한 서명을 갖는 두 개의 메소드 GetEnumerator()을 구현해야합니다. 그래서 당신은 명시 적으로 IEnumerable.GetEnumerator()를 구현해야합니다 : 당신이 방법 만의 인터페이스를 통해, 개체 인스턴스를 호출하지 않으려면

public abstract class MyClass<T> : IEnumerable<T> 
{ 
    public IEnumerator<T> GetEnumerator() 
    { 
     return ...; 
    } 

    IEnumerator IEnumerable.GetEnumerator() // explicit implementation required 
    { 
     return GetEnumerator(); 
    } 
} 

명시 적 구현을위한 또 다른 용도가있다. 나는 개인적으로 이것이별로 의미가 없다고 생각하지만 아주 드물게는 유용 할 수 있습니다.

3

필립의 대답은 실용적이지만, 건축 학적 고려 사항도 있습니다.

인터페이스는 다른 개체에서 사용할 수 있도록 클래스를 호환 가능하게 만드는 데 사용됩니다. 객체를 소비하는 객체 만 인터페이스의 기능을 필요로하는 경우 최소 권한의 원칙에 따라 객체를 제한해야합니다. 해당 인터페이스 메소드를 클래스의 다른 모든 사용자에게 노출하는 것은 불필요합니다. 객체가 내부 개체에서 호출을 수락 할 수있는 인터페이스를 구현해야하지만 당신은 당신의 API의 일부로 사람들을 노출하지 않으려는 경우

+0

이것이 적용되는 예를 생각해 볼 수 있습니까? – jasonh

+0

웹 개발. 클래스가 웹에서 서비스를 제공하도록 설계된 경우 보안 인터페이스에서 신원 확인을 수행하는 방법이있을 수 있으며 다른 상황에서는 사용할 수 없습니다 (로컬). 이것은 내가 종종 무시한다고 생각하는 C# 기능을 약간 알고 있습니다. 거기에 다른 예제가 있습니까? – Paul

1

명시 적 인터페이스에 대한 또 다른 경우이다.

관련 문제