Looking for c# Keywords? Try Ask4Keywords

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>

Посмотреть демо

5.0

ошибка

ошибка CS0121: вызов неоднозначен между следующими методами или свойствами: «Program.Overloaded (System.ction)» и «Program.Overloaded (System.Func)»

C # 6 также может хорошо обработать следующий случай точного соответствия для лямбда-выражений, что привело бы к ошибке в C # 5 .

using System;

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

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