Делегаты
От: Аноним  
Дата: 01.06.13 15:52
Оценка:
Здравствуйте. Почему результат 14?

  class Program
    {
        public static int sq(int x)
        {
            return ++x;
        }

        public static int sq2(int x)
        {
            return x + 10;
        }

        static void Main(string[] args)
        {
            Func<int, int> f = sq;
            f += sq2;

            Console.WriteLine(f(4));

            Console.ReadLine();
        }
    }
Re: Делегаты
От: Аноним  
Дата: 01.06.13 15:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте. Почему результат 14?


А почему должен быть другой ? Как не считать 14 и получается.

4+10=14
Re[2]: Делегаты
От: Аноним  
Дата: 01.06.13 15:57
Оценка:
Здравствуйте, Аноним, Вы писали:

А>А почему должен быть другой ? Как не считать 14 и получается.


А>4+10=14


Логичнее было бы, если результат был 15 или 4.
Re[3]: Делегаты
От: Аноним  
Дата: 01.06.13 16:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>А почему должен быть другой ? Как не считать 14 и получается.


А>>4+10=14


А>Логичнее было бы, если результат был 15 или 4.


Не... чем же это логичнее..

Console.WriteLine принимает int..
у вас MulticastDelegate
в момент f(4) он просто пробегается по списку invocation и на последнем возвращает результат.
это вы и видите в результате...
Re: Делегаты
От: Loooser Россия  
Дата: 01.06.13 16:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте. Почему результат 14?


Потому что сначала вызывается sq(4) а потом sq2(4)?
Re: Делегаты
От: Аноним  
Дата: 01.06.13 16:43
Оценка: 1 (1) +1
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте. Почему результат 14?


Спецификация:

15.4 Delegate invocation
...
Invocation of a delegate instance whose invocation list contains multiple entries proceeds by invoking each of the methods in the invocation list, synchronously, in order. Each method so called is passed the same set of arguments as was given to the delegate instance. If such a delegate invocation includes reference parameters (§10.6.1.2), each method invocation will occur with a reference to the same variable; changes to that variable by one method in the invocation list will be visible to methods further down the invocation list. If the delegate invocation includes output parameters or a return value, their final value will come from the invocation of the last delegate in the list.

Re[3]: Делегаты
От: Аноним  
Дата: 01.06.13 18:54
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Аноним, Вы писали:


А>>А почему должен быть другой ? Как не считать 14 и получается.


А>>4+10=14


А>Логичнее было бы, если результат был 15 или 4.


Откуда 15 или 4 ??

у тебя 2 функции.

f1(x)=x
f2(x)=x+10

как можно в любой комбинации их вызова f1(f2(x)) или f2(f1(x)) получить 15 или 4 я чет ума не приложу ?
у меня всегда 14 получается как ни крути.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.