Re[4]: Что такой анонимный метод(функция)?
От: alexzzzz  
Дата: 18.11.19 11:34
Оценка: 3 (1) +1
Здравствуйте, Sinclair, Вы писали:

S>Вот простой пример:

S>
S>public static bool IsEven(int i) => { i % 2 == 0;}
S>....
S>var even = from n in numbers where IsEven(n) select n; 
S>

S>Здесь мы определили функцию по имени IsEven. Её сигнатура — Func<int, bool>. Её тело — {return i % 2 == 0;}.

Исключительно занудства ради, с целью лишь бы придраться:
1) Сигнатура функции (т.е. имя и список типов параметров) — IsEven(int)
2) Func<int, bool> — это тип делегата, к которому будет приведён "method group" IsEven в месте его использования.
Отредактировано 18.11.2019 11:36 alexzzzz . Предыдущая версия . Еще …
Отредактировано 18.11.2019 11:35 alexzzzz . Предыдущая версия .
Re[5]: Что такой анонимный метод(функция)?
От: Silver_S Ниоткуда  
Дата: 18.11.19 15:07
Оценка: 3 (1)
Здравствуйте, nt2000, Вы писали:

N>анон.ф-ия === ф-ия без заголовка === только тело ф-ии === кусок кода

N>Раз анон.ф-ия есть ф-ия без заголовка то есть только тело ф-ии читай кусок кода
N>тогда почему бы не "..передать как параметр в другую функцию.." просто кусок кода?

А как предлагаешь в такую функцию передавать кусок кода?:
static void Func(Action a)
{
    a();
}



Func( Console.WriteLine("1"); Console.WriteLine("2"); ); //Так были бы проблемы, противоречия в синтаксисе.
Func( {Console.WriteLine("1"); Console.WriteLine("2");} ); //Так тоже были бы проблемы, скорее всего.

//Сейчас можно только так сделать:
Func( delegate{Console.WriteLine("1"); Console.WriteLine("2");} ); 
Func( delegate(){Console.WriteLine("1"); Console.WriteLine("2");} ); 
Func( () => {Console.WriteLine("1"); Console.WriteLine("2");} );


Это и так зоопарк. ИМХО, лучше только один вариант использовать () =>


N>Или всё же это не ф-ия без заголовка, а нечто другое? чё скрываете?! давай-те уже колитесь..


Компилятор ее превращает в обычную функцию, дает ей свое корявое имя, чтобы не совпало с твоими функциями.
Код в другую функцию никогда не передается(как бы это в тексте программы ни выглядело), передаются только указатели на функции.

Теоретически есть возможность передать в функцию именно код, в виде теста программы или уже откомпилированный и исполнить.
Но если только начал изучать C# то считай — это радикальные хакерские трюки, с большими накладными расходами, и сам C# их не поддерживает.
Отредактировано 18.11.2019 15:44 Silver_S . Предыдущая версия . Еще …
Отредактировано 18.11.2019 15:43 Silver_S . Предыдущая версия .
Отредактировано 18.11.2019 15:08 Silver_S . Предыдущая версия .
Отредактировано 18.11.2019 15:08 Silver_S . Предыдущая версия .
Re[4]: СПАСИБО. Такое разжёвывание дорогого стоит.
От: nt2000  
Дата: 18.11.19 16:01
Оценка:
Здравствуйте, Sinclair, Вы писали:
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.