Deutsch

C# - pattern matching - many discards

10.03.24 18:55
Re: C# - pattern matching - many discards
 
MrSanders коренной житель
в ответ AlexNek 10.03.24 17:56, Последний раз изменено 10.03.24 19:10 (MrSanders)
Судя пот ответу вы считает, что я тоже бросаю камни в Яву. Абсолютно не так. Я просто пытаюсь найти отличия.

Нет, мне просто интересно как в шарпе реализовали именно ссылки на методы, а не присваивание "имён" лямбдам. Я с этим в шарпе не сталкивался.


Про Runnable там не было. Интересно как с различными количеством параметров происходит?

В яве сделали через "функциональные интерфейсы". Любой интерфейс с одним методом считается "функциональным", т.е. может описывать тип функции (метода).

Runnable старый интерфейс, который был и до 8-й явы, и не лежит в java.util.function. Но так как у него один метод, то и он стал "фунциональным" :) И он прям подошёл для твоего примера, потому что параметров нет и ничего не возвращает.


Фишка в том, что любой метод класса или лямбду можно определить типом функционального интерфейса у которого единственный метод имеет те же параметры (количество и тип) и тот же тип результата (ну, про наследование и приведение типов не забываем) что и наш метод / лямбда. В примере, как add: два инта и возвращает инт.


public interface MyMethod { int add(int a, int b);}

// Не функциональный! больше одного метода
public interfce TooManyMethods {
  int add(int a, int b);
  int multiply(int a, int b);
}

MyMethod m = (a, b) -> a + b;

// маловато параметеров, ошибка будет
MyMethod wrong = a -> a + 10;

как-то так

 

Перейти на