모든 클래스는 IPrettyPrint 인터페이스를 구현합니다. 확장 메서드를 사용하면 예를 들어 Double에 PrettyPrint 메서드를 추가 할 수 있습니다. (List<T>
, ...)하지만 IPrettyPrint를 이중으로 지원할 수있는 가능성이 있습니까? PrettyPrint 메서드를 사용하기를 좋아하는 사람은 IPrettyPrint에만 의존 할 수 있습니다.확장 메서드 및 인터페이스
1
A
답변
3
아니요, "오리 입력"을 허용하는 라이브러리를 사용하지 않는 한 아니요. 그리고 심지어 그 방법이 확장 메서드에서만 구현 되었다면 당신이 어려울 것이라고 생각합니다.
확장 메서드에 속지 마십시오. 형식 자체에 아무 것도 추가하지 않고 컴파일러에서 해석하는 "구문 설탕"만 제공합니다.
1
확장 메서드는 런타임 기능이 아닌 컴파일러 기능으로, Type
에 메서드를 추가하는 것을 에뮬레이트합니다. 그러나 코드를 디 컴파일하면 실제로는 그렇게하지 않습니다 (.NET에서는 정적/폐쇄 형 시스템, 실제로 유형에 메서드를 추가 할 수있는 유일한 방법은 형식에서 상속
그래서, 기술적, double
결코 IPrettyPrint
를 지원하지 않습니다) 당신의 새로운 유형으로 방법을 추가하는 것입니다 그래서 - 컴파일러는 단지 그것이하는 것처럼 가장합니다.
0
타입이 조작을 지원하면 (즉, 찾고있는 메소드가 정의 된 경우) 반사 형을 사용하여 오리 유형을 에뮬레이션 할 수 있습니다. 그런 다음 암시 적으로 해당 인터페이스를 사용합니다. 전화해야합니다. 그렇지 않으면, 그렇지 않습니다!
문제는 C# 반사가 약간 느리고 대부분의 경우 시간을 낭비하는 것입니다. 예제 코드는 다음과 같습니다.
통계가 마음에 드는 사람이라면 반영이 필요할 때 아무 것도 없습니다. 그러나 메서드 호출 :
obj = method.Invoke(null, new object[]{value});
성능 호그는 실행하는 데 약 4-5 밀리 초가 걸립니다.
관련 문제
- 1. Java 인터페이스 상속 및 확장
- 2. 클래스 확장 및 인터페이스 구현
- 3. PHP에서 인터페이스 및 마법 메서드 사용 방법
- 4. 메서드/인터페이스 호출
- 5. 캐스트 인터페이스 일반 메서드
- 6. 인터페이스 빌더 확장?
- 7. .NET : ForEach() 확장 메서드 및 사전
- 8. C# : 암시 적 연산자 및 확장 메서드
- 9. PowerShell, 확장 메서드 및 원숭이 패치
- 10. CakePHP 컨트롤러 확장 및 메서드 재정의
- 11. PHP 젠드 엔진 확장 및 정적 메서드
- 12. 재귀 IQueryable Linq 확장 메서드
- 13. ReaderWriterLockSlim 확장 메서드 성능
- 14. Enum의 IEnumerable 확장 메서드
- 15. ValueProvider.GetValue 확장 메서드
- 16. gridview eval의 확장 메서드
- 17. 정적 확장 메서드
- 18. Container.DataItem의 확장 메서드 출력?
- 19. Linq에 확장 메서드
- 20. LINQ 확장 메서드 재정의
- 21. 조인 확장 메서드 구문
- 22. 모델 인스턴스 확장 메서드
- 23. 확장 메서드 비동기 만들기
- 24. 모노로 확장 메서드 사용
- 25. 확장 메서드 정보
- 26. 확장 메서드 결합
- 27. ControlCollection에 확장 메서드 최적화
- 28. 확장 클래스 메서드
- 29. 확장 메서드 스레드가 안전합니까?
- 30. jQuery UI 메서드 확장