2012-12-30 2 views
0

반환 유형을 객체 나 자신이 정의한 사용자 정의 유형으로 변환하려고하면 암시 적 연산자에 문제가있는 이유는 무엇입니까? 내가 개체 또는 사용자 정의 형으로 유형을 변환 할 때사용자 정의 정의 유형으로 변환 할 때 암시 적 연산자에 오류가 발생합니다.

나는 내가, 내가 그러나이

public static implicit operator int(MyClass a) 
     { 
      return 123; 
     } 

처럼 변환하고 int 같은 간단한 형식을 반환하려고 아무 문제가 없다 오류가 발생합니다. 나는이있는 경우

public static implicit operator object(MyClass a) 
{ 
    return new {}; 
} 

내가 오류 같은 종류를 얻을 것이다 : 예를 들어, 나는 이런 식으로 뭔가가있는 경우 "으로 System.Object에 사용자 정의 변환을"말 컴파일 타임 오류가 발생합니다 :

public static implicit operator CustomTestObject(MyClass a) 
{ 
    return new CustomTestObject(); 
} 

암시 적 연산자를 사용할 때 반환 할 사용자 지정 정의 유형으로 변환하려면 어떻게해야합니까?

+0

'CustomTestObject' 변환이 작동하지 않는 이유를 알 수 없습니다. –

+0

@mikez 마지막 변환에 대한 정확한 컴파일러 메시지를보고 싶습니다. 또한 내부 클래스 (또는 구조체), 해당 클래스의 상속 체인 및'MyClass' 및'CustomTestObject' 상속 체인을 알고 싶습니다. 제 대답에서 저는 다른 하나의 기본 클래스라고 생각했습니다. –

+0

@JeppeStigNielsen 예, 설명 할 수 있습니다. –

답변

5

내 기본 클래스 중 하나에 암시 적 변환을 선언 할 수 없습니다. System.Object은 항상 (직접 또는 간접) 기본 클래스입니다. 상속을 통해 이미 기본 클래스로의 암시 적 변환이 이미 있습니다. 그렇다면 두 개의 암시 적 전환 인이있을 수 있습니까? C# 스펙에는 이것을 허용하지 않는 좋은 공명이 있습니다!