3

문자열에 대한 암시 적 연산자가 필요한 구조로 작업하고 있으며 생각하지 못했던 기본적인 질문을 발견했습니다.암시 적 C#에서 오버로드 된 경우 명시 적 연산자에 과부하가 발생합니까?

public static implicit operator Version (string value) {...} 

나는 캐스팅을 적용 할 경우에만 명시 적 연산자를 가진 이해할 수 있지만, 암시 적 연산자는 이미 과부하 경우에 당신이 그것을 필요로 할 상황을 생각할 수 없다. 하나 있습니까?

+3

~/같은 유형의 나는 추정합니까? 당신은 그것에 대해 분명하지 않습니다. –

+0

@HenkHolterman : 귀하의 의견은 저를 생각하게했습니다. 당신은 구조체를 객체에 넣을 수 있고 문자열로부터의 캐스트가 암시 적으로 남아있을 수있는 동안 명시 적 캐스트를 요구할 수 있습니다. –

+1

글쎄, 먼저 완전한 질문을하십시오 : 약 2 명의 운영자에게 두 가지 질문을하고 있습니다. –

답변

8

없습니다. 사실, 에 동일한 변환에 대한 암시 적 명시 적 변환 연산자를 모두 정의 할 수 없습니다.

public class Foo 
{ 
    public static implicit operator Foo(string value) 
    { 
     Console.WriteLine("implicit"); 
     return null; 
    } 

    public static explicit operator Foo(string value) 
    { 
     Console.WriteLine("Explicit"); 
     return null; 
    } 
} 

그것은의 오류를 제공합니다 : 그것은 컴파일 시간 오류입니다

Duplicate user-defined conversion in type ...

당신이 암시 적 변환을 정의 할 경우 명시 적 변환을 쓸 수 있습니다 그것은 수행 할 암시 적 변환의 코드를 사용합니다 변환하지만 암시 적 변환을위한 코드를 정의하는 방법은 없으며 다른 작업을 수행하는 명시 적 변환을 정의 할 수있는 방법이 없습니다.