Делегаты С# (вывод не показывает правильные значения)

Я пытаюсь получить вывод «1111111111». Функция Message вызывается AddMessage и сохраняет сообщение в массив. Однако, когда я вывожу значения массива, я получаю адрес вместо значения. Как это исправить?

class Program
{
    public delegate int print();

    public static void Main()
    {
        print[] array1 = new print[10];

        AddMessage(ref array1, Message);

        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine(array1[i]);
        }
    }


    public static void AddMessage(ref print[] array, print msg)
    {
        for(int i =0; i< 10; i++)
        {
            array[i] = msg;
        }
    }

    public static int Message()
    {
        int msg;
        msg = 1;
        return msg;
    }


} 

}


person JeremyM    schedule 01.11.2017    source источник
comment
В вашем коде нет необходимости в ref в ref print[] array — подойдет только print[] array. Почему вы поставили ref?   -  person Enigmativity    schedule 01.11.2017


Ответы (2)


Делегат — это функция, вы передаете ссылку на саму функцию (а не на результат) в Console.WriteLine.

Console.WriteLine(array1[i]);

должен превратиться в

Console.WriteLine(array1[i]());
person caesay    schedule 01.11.2017

Вы печатаете имя объекта, потому что не вызываете делегата:

for (int i = 0; i < 10; i++)
{
    Console.WriteLine(array1[i]);
}

Вы должны изменить это на array1[i]()

person Llama    schedule 01.11.2017
comment
Спасибо. Теперь я понимаю. - person JeremyM; 01.11.2017