2011-09-07 10 views
1

가능한 중복 :
C#: implicit operator and extension methodsC# 확장 메서드를 사용하여 암시 적 변환을 구현할 수 있습니까?

나는 종류의 수를 (아무것도 너무 복잡, 단지 특성을 중심으로) 정의 공통 라이브러리 프로젝트가 있습니다. 이 공통 라이브러리를 참조하는 두 개의 프로젝트, 즉 클라이언트 응용 프로그램과 웹 서비스.

제 의도는 웹 서비스가 T 유형을 반환 한 다음 클라이언트 응용 프로그램에서 T를 사용하려는 것입니다. 일반적으로 웹 서비스에서 반환 한 형식을 다시 T로 변환해야합니다 (프록시 클래스로 인해 T가 WebService.T로 반환 됨). 그러나 implicit conversion을 대신 사용하려고합니다.

원본 공통 클래스는 웹 서비스 프록시 클래스에 대한 지식이 없으므로 extension methods을 사용하여 암시 적 변환을 구현할 수 있는지 궁금합니다. 컴파일러가 전혀 좋아하지 않는 것 같은 종류의 것

public static implicit operator MyObject(this MyProxyObject value) 
    { 
     //stuff 
    } 

.

이렇게해도 될까요?

업데이트

확인은, 우선 내 컴파일러 문제를 설명하고 있으므로 참조 2.0 프레임 워크를했다.

두 번째로, 메서드 확장 "ToModel"(또는 뭔가)을 만들어 변환을 수행 할 수 있습니다. 그래서 비즈니스 목표의 관점에서 WebService.T.ToModel()을 호출하여 내 형식을 쉽게 변환 할 수 있습니다.

비록 이것이 암시 적 변환을 사용하여 수행 할 수 있는지 의심 스럽지만 (또는 문제가 있는지 여부) 의심 스럽습니다.

답변

0

확장 방법이 필요하지 않습니다. this을 제거 할 수 있어야하며 컴파일해야합니다. 또는 explicit 캐스트로 사용하는 것이 더 합리적 일 수 있습니다.

+0

분명히 말하면, 암시 적 변환은 클래스 T에서 선언되지 않고 WebServiceManager에서 선언됩니다. 따라서 T의 선언에서 변환을 수행하고 싶지 않기 때문에 (WebService.T 프록시 클래스에 대한 지식이 없어야하므로) 포함하는 유형 (정적 메서드가있는 클래스)은 T 유형이 아니라 WebServiceManager 유형입니다. – MoSlo

1

웹 서비스가 기존 ASMX 서비스가 아닌 WCF 서비스 인 경우 클라이언트 측의 서비스 참조를 '참조 된 어셈블리의 유형 재사용'으로 구성 할 수 있습니다. 이렇게하면 클라이언트 측에서 클라이언트 측에서 자동 생성 프록시 클래스 대신 공용 라이브러리의 유형을 사용하게됩니다.

+0

아쉽게도 기존 ASMX 서비스가 필요합니다. : \ 당신의 접근 방식은 꽤 소리가. – MoSlo

관련 문제