초보자인데 인터페이스 확장 메서드를 구현하는 방법을 이해하는 데 문제가 있습니다. 이 문제에 관해 어떤 자료도 찾지 못했습니다. C#의 일반적인 확장 메서드에서 찾은 자료에서 다음과 같은 간단한 예제 작업을 예상했습니다. 그러나 컴파일러는 여전히 만족스럽지 않습니다. 무엇을 놓쳤을까요? 코드와 동일한 의미를 가진 올바른 구문은 무엇입니까?확장 메서드 구현 인터페이스 C#
답변
을 그림자 이후 그냥
bool y()
{
return false;
}
해야한다. 확장 메서드는 정적 클래스에서 정적 메서드를 호출하는 편리한 컴파일러입니다. 그들은 인터페이스를 확장하지 않습니다. 확장 방법을 사용하는 경우 컴파일러는 무엇을 :
IcheckThingsOut instance = new IcheckThingsOutImpl();
instance.y();
이 ...로 변환됩니다 : 당신이 볼 수 그래서
IcheckThingsOut instance = new IcheckThingsOutImpl();
extensionInterface(instance, y);
, Y는 인터페이스의 방법은 아닙니다. 이것이 구현에서 명시 적으로 구현할 수없는 이유입니다.
"확장 된"클래스 또는 인터페이스에서 확장 메서드의 구현을 변경할 수 없습니다. 확장 메서드는 구현입니다.
확장 메서드는 인터페이스 또는 클래스에 메서드를 "추가"하는 방법을 제공합니다. 전체적인 생각은 당신이 확장하고있는 인터페이스 나 클래스가이 메소드에 대해 "알지 못한다"는 것이다. 즉, 클래스 또는 인터페이스 자체를 변경하지 않고 기능을 "추가"합니다.
(표기법에 따르면 인터페이스에 메소드를 추가하고 있음을 알 수 있습니다. 사실이 메소드는 런타임과 관련하여 일반 정적 메소드입니다. IcheckThingsOut 기능 y
에 대한 더 프로토 타입을 제공하지 않는다 :
는 IcheckThingsOut는
bool IcheckThingsOut.y()
{
return false;
}
이 잘못 부울 Y()를 가지고 dosn't. 그냥 당신은 확장 방법과 인터페이스의 개념을 엉망 다른 방법
사용하려는 것으로 보이는 것은 "확장 방법"입니다. 이 목적으로 extensionInterface
클래스가 올바르게 구현되었습니다.
그러나 확장 메서드를 만들면 실제로 인터페이스가 확장되지 않으므로 myIcheckThingsOut.y()
을 호출 할 수 있지만 암시 적으로 또는 명시 적으로 IcheckThingsOut
을 구현하는 클래스에서 메서드를 다시 구현할 수는 없습니다.
- 1. 확장 메서드 및 인터페이스
- 2. 클래스 확장 및 인터페이스 구현
- 3. Visual Studio C++ 구현 인터페이스
- 4. 인터페이스 타입 메서드 매개 변수 구현
- 5. C# : 확장 메서드 검색
- 6. 올바른 인터페이스 구현을 반환하는 확장 메서드?
- 7. 일반 확장 클래스 및 인터페이스 구현
- 8. 리플렉션을 사용하여로드 된 클래스/인터페이스 확장/구현
- 9. C# 스레드 안전 확장 메서드
- 10. C# Count() 확장 메서드 성능
- 11. 개체에 대한 C# 확장 메서드
- 12. C#의 확장 메서드 연결
- 13. 인터페이스 구현
- 14. 인터페이스 구현
- 15. 인터페이스 구현 vs. 인터페이스 제공
- 16. C# 인터페이스
- 17. FTP 인터페이스/프로토콜 구현
- 18. C++에서 확장 가능 코드 구현
- 19. 인터페이스 구현 (인터페이스 분리 원칙)
- 20. 부분적으로 인터페이스 구현
- 21. IEditableCollectionView 인터페이스 구현 방법
- 22. IExtractImage COM 인터페이스 구현
- 23. 메서드 구현
- 24. setTimeout 네이티브 메서드 구현
- 25. 작성자 패턴. 확장 인터페이스
- 26. Delphi에서 .NET 인터페이스 구현
- 27. 메서드/인터페이스 호출
- 28. C# 메서드 오버로드 대 인터페이스 매개 변수
- 29. .NET 4.0 (C#)에서 동적으로 인터페이스 구현
- 30. ICloneable 인터페이스 구현 C# (딥 복제)
오류 메시지가 무엇입니까? – unholysampler
컴파일러는 무엇을 말합니까? 명시 적으로 인터페이스 이름을 명시하지 않고'y()'를 구현해보십시오. –