C#代理(输出未显示正确的值)

时间:2017-11-01 04:14:08

标签: c# delegates

我正在尝试获得" 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;
    }


} 

}

2 个答案:

答案 0 :(得分:2)

委托是一个函数,您将对函数本身的引用(而不是结果)传递给Console.WriteLine

Console.WriteLine(array1[i]);

必须变成

Console.WriteLine(array1[i]());

答案 1 :(得分:1)

您正在打印对象名称,因为您没有调用该委托:

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

您应该将其更改为array1[i]()