다음과 같은 것을하려고합니다 :인터페이스에서 다른 유형으로 암시 적 변환을 작성하는 방법?
public class SomeWrapper : ISomeWrapper{
public static implicit operator ActualRec(ISomeWrapper someWrapper)
{
return ((SomeWrapper)someWrapper).SomeInfo;
}
}
그러나이 코드는 실패합니다. "매개 변수 또는 반환 유형이 SomeWrapper 유형이어야합니다."
컴파일이 진술하는 문제를 이해합니다. 하지만 내 응용 프로그램을 통해 SomeWrapper 인스턴스를 저장하는 ISomeWrapper 변수를 사용하기 때문에이 형식 conversionb 필요합니다. 또한 SomeWrapper는 ISomeWrapper를 구현하는 유일한 클래스입니다.
내 구체적인 클래스에서 알고있는 형식에 ISomeWrapper 인터페이스가 있으면 암시 적 변환을 수행 할 수있는 방법이 있습니까?
편집 : 모두에 의해 암시 적으로, C#에서는 인터페이스에서의 암시 적 캐스팅이 불가능합니다.
왜 이렇게해야합니까? ActuallyRec의 메서드/속성을 호출하기 위해 ISomeWrapper 사용자에게 액세스 권한을 부여하지 않고 ActualRec을 매개 변수로 필요로하는 메서드를 호출하도록 ISomWrapper 사용자에게 (암시 적으로) 허용하려고합니다.
예를 들어, ISomeWrapper에 ActualRec 속성을 포함하면 ISomeWrapper의 사용자는 노출하고 싶지 않은 ActualRec (Say, someWrapper.ActualRec.Dispose())에서 사용할 수있는 메서드를 호출 할 수 있습니다.그것이 암시 적 변환을 찾으려는 이유입니다.
또한, SomeWrapper를 응용 프로그램에 걸쳐 사용하고 싶지 않습니다.
이 작업을 수행하기위한 개념/패턴이 있는지 제안하십시오.
관심을 가져 주셔서 감사합니다.
"SomeWrapper는 ISomeWrapper를 구현하는 유일한 클래스입니다."- "나쁜 코드 냄새가 난다"라는 큰 빨간색 깃발을 흔들고 있습니다. 인터페이스를 구현하는 클래스가 하나뿐이라면 어떤 값이 인터페이스입니까? 어디서나 수업을 사용하십시오. –
@ Eric : 단위 테스트에이 인터페이스를 사용하기 때문에 무의미하지 않습니다. –