2017-02-12 6 views
2

메서드의 반환 형식이 메서드를 다른 메서드로 전달할 때 과부하가 될 수 있다는 사실에 놀랐습니다. 리턴 타입은 서명의 일부가 아니기 때문에 이전에는 존재하지 않았던 리턴 값의 변경이 모호함을 어떻게 만들 수 있는지 알기가 어렵습니다. 그러나 이것은 void와 Task의 경우 인 것으로 보인다. 다음 사항을 고려대리자에게 할당 할 때의 반환 값 및 서명의 모호성 - Func <Task> 대 액션

class Signature 
    { 
     static public void Overload(Func<Task> countasync) 
     { 
     } 
     static public void Overload(Action count) 
     { 
     } 
    } 

    void Decrement() { } 
    Task IncrementAsync() { return Task.CompletedTask; } 

    void TestSig() 
    { 
     Signature.Overload(this.IncrementAsync); // no compile time error 
     Signature.Overload(this.Decrement); // compile time error: this call is ambiguous 
    } 

두 번째 호출이 모호되지 않도록 여전히 첫 번째 통화를 허용하면서, 과부하 인수 유형을 정의하는 방법이 있나요?

답변

1

아니요, 과부하 해결 방법을 수정할 수 없습니다.

, 당신이 약간 추악한 전화 사이트 코드의 비용으로 모호성을 제거 할 수 있습니다 컴파일러가 제대로 그 경우에 과부하를 추론 할 것이다

Signature.Overload(() => this.Decrement()); 

.

+0

모호성의 원인은 메서드 형식과 달리 대리자 형식이 매개 변수 형식뿐만 아니라 반환 형식으로도 구분된다는 사실입니다. 예를 들어, 이벤트 핸들러의 반환 유형에 따라 다른 이벤트 유형을 가질 수 있다는 점이 다릅니다. –