Информация об изменениях

Сообщение Re[5]: Что такой анонимный метод(функция)? от 18.11.2019 15:07

Изменено 18.11.2019 15:44 Silver_S

Re[5]: Что такой анонимный метод(функция)?
Здравствуйте, 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# их не поддерживает.
Re[5]: Что такой анонимный метод(функция)?
Здравствуйте, 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# их не поддерживает.