2015-01-15 2 views
3

에서 변환 할 수 없습니다, 나는암시 다음 코드는 컴파일되지 않습니다 비동기 방식

namespace ImplicitConversion 
{ 
    struct Wrapper<T> 
    { 
     public static implicit operator Wrapper<T> (T input) 
     { 
      return new Wrapper<T>(); 
     } 
    } 

    interface IFoo 
    { 
    } 

    class Foo:IFoo 
    { 
    } 

    class MainClass 
    { 
     public static void Main (string[] args) 
     {  
     } 

     static Wrapper<IFoo> Test() 
     { 
      IFoo foo = new Foo(); 
      return foo; // Cannot implicitly convert type 'ImplicitConversion.IFoo' to 'ImplicitConversion.Wrapper<ImplicitConversion.IFoo>' (CS0029) (ImplicitConversion) 
     } 
    } 
} 

왜 내가 암시 적 변환을 사용할 수없는 이유를 이해하지?

+1

:

은 자세한 내용은이 대답을 참조하십시오. 이 변환은'Task >'이든 'Wrapper ' – DLeh

+0

이든간에 실패합니다. 또한 serdar가 맞다면 인터페이스에서 암묵적으로 변환 할 수 없습니다 : http://stackoverflow.com/a/143567/526704 당신이 옳다면 – DLeh

+0

@ DLeh. 내가 질문을 편집했습니다 – miniBill

답변

2

DLeh에서 언급 한 것처럼 비동기식이 아닙니다.

AFAIK 인터페이스는 암시 적 또는 명시 적으로 변환 할 수 없습니다. 이것은 정말 BTW 비동기 방식 인과 아무 상관이없는 https://stackoverflow.com/a/143567/526704

+1

예, C# spec에서 6.4.4. (또한 제네릭을 제거하면 명시 적으로 '인터페이스에서 사용자 정의 변환'오류가 발생합니다.) – Rawling

+0

질문을 수정했습니다. – miniBill