C# Language 향상된 과부하 해결


다음 스 니펫은 델리게이트가 예상 될 때 메서드 그룹 (람다와 반대)을 전달하는 예를 보여줍니다. C # 6 에서 전달 된 메서드의 반환 형식을 확인하는 기능 때문에 모호한 오버로드 오류가 발생하는 대신 오버로드 해결로 해결됩니다.

using System;
public class Program
{
    public static void Main()
    {
        Overloaded(DoSomething);
    }

    static void Overloaded(Action action)
    {
       Console.WriteLine("overload with action called");
    }

    static void Overloaded(Func<int> function)
    {
       Console.WriteLine("overload with Func<int> called");
    }

    static int DoSomething()
    {
        Console.WriteLine(0);
        return 0;
    }
}

결과 :

6.0

산출

Func <int>라는 overload가 호출되었습니다.

데모보기

5.0

오류

오류 CS0121 : 'Program.Overloaded (System.Action)'및 'Program.Overloaded (System.Func)'메서드 또는 속성 사이의 호출이 모호합니다.

C # 6C # 5 에서 오류가 발생한 람다 식에 대한 정확한 일치의 다음 사례를 잘 처리 할 수도 있습니다.

using System;

class Program
{
    static void Foo(Func<Func<long>> func) {}
    static void Foo(Func<Func<int>> func) {}

    static void Main()
    {
        Foo(() => () => 7);
    }
}