2017-11-01 2 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

가'심판 인쇄 [] array'에서 ref''에 대한 필요가 없습니다에

Console.WriteLine(array1[i]); 

을 설정해야합니다. 왜 당신은'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]()); 
+0

고맙습니다. 이제 작동합니다. – JeremyM

관련 문제