2017-11-01 5 views
0

"1111111111"の出力を取得しようとしています。 Message関数はAddMessageによって呼び出され、メッセージを配列に格納します。 しかし、私は配列の値を出力するとき、私は値の代わりにアドレスを取得します。どのように私はこれを修正するのですか?C#デリゲート(出力に正しい値が表示されない)

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; 
    } 


} 

}

+0

にオンにする必要があります。なぜあなたは 'ref'を入れましたか? – Enigmativity

答えて

1

あなたはデリゲートを呼び出していないので、あなたは、オブジェクト名を印刷している:

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

あなたはarray1[i]()

+0

ありがとうございます。今、私は分かる。 – JeremyM

2

デリゲートにこれを変更する必要がある関数です関数自体(結果ではない)への参照をConsole.WriteLineに渡しています。ちょうど `印刷array`を行います[] -

Console.WriteLine(array1[i]); 

は` refの印刷[] array`でref` `の必要がない、あなたのコードでは

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

ありがとうございました。それは今働く – JeremyM

関連する問題