2012-06-14 5 views
2

초보자인데 인터페이스 확장 메서드를 구현하는 방법을 이해하는 데 문제가 있습니다. 이 문제에 관해 어떤 자료도 찾지 못했습니다. C#의 일반적인 확장 메서드에서 찾은 자료에서 다음과 같은 간단한 예제 작업을 예상했습니다. 그러나 컴파일러는 여전히 만족스럽지 않습니다. 무엇을 놓쳤을까요? 코드와 동일한 의미를 가진 올바른 구문은 무엇입니까?확장 메서드 구현 인터페이스 C#

+0

오류 메시지가 무엇입니까? – unholysampler

+0

컴파일러는 무엇을 말합니까? 명시 적으로 인터페이스 이름을 명시하지 않고'y()'를 구현해보십시오. –

답변

3

을 그림자 이후 그냥

bool y() 
{ 
    return false; 
} 

해야한다. 확장 메서드는 정적 클래스에서 정적 메서드를 호출하는 편리한 컴파일러입니다. 그들은 인터페이스를 확장하지 않습니다. 확장 방법을 사용하는 경우 컴파일러는 무엇을 :

IcheckThingsOut instance = new IcheckThingsOutImpl(); 
    instance.y(); 

이 ...로 변환됩니다 : 당신이 볼 수 그래서

IcheckThingsOut instance = new IcheckThingsOutImpl(); 
    extensionInterface(instance, y); 

, Y는 인터페이스의 방법은 아닙니다. 이것이 구현에서 명시 적으로 구현할 수없는 이유입니다.

2

"확장 된"클래스 또는 인터페이스에서 확장 메서드의 구현을 변경할 수 없습니다. 확장 메서드는 구현입니다.

확장 메서드는 인터페이스 또는 클래스에 메서드를 "추가"하는 방법을 제공합니다. 전체적인 생각은 당신이 확장하고있는 인터페이스 나 클래스가이 메소드에 대해 "알지 못한다"는 것이다. 즉, 클래스 또는 인터페이스 자체를 변경하지 않고 기능을 "추가"합니다.

(표기법에 따르면 인터페이스에 메소드를 추가하고 있음을 알 수 있습니다. 사실이 메소드는 런타임과 관련하여 일반 정적 메소드입니다. IcheckThingsOut 기능 y에 대한 더 프로토 타입을 제공하지 않는다 :

0

는 IcheckThingsOut는

1
bool IcheckThingsOut.y() 
{ 
    return false; 

} 

이 잘못 부울 Y()를 가지고 dosn't. 그냥 당신은 확장 방법과 인터페이스의 개념을 엉망 다른 방법

3

사용하려는 것으로 보이는 것은 "확장 방법"입니다. 이 목적으로 extensionInterface 클래스가 올바르게 구현되었습니다.

그러나 확장 메서드를 만들면 실제로 인터페이스가 확장되지 않으므로 myIcheckThingsOut.y()을 호출 할 수 있지만 암시 적으로 또는 명시 적으로 IcheckThingsOut을 구현하는 클래스에서 메서드를 다시 구현할 수는 없습니다.