2016-01-06 26 views
-1
using System; 

namespace _1._75_Using_a_delegate 
{ 
    public class Program 
    { 

     public delegate int Calculate(int x, int y); 

     public int Add(int x, int y) { return x + y; } 
     public int Multiply(int x, int y) { return x * y; } 

     public void UseDelegate() 
     { 


      Calculate calc = Add; 
      Console.WriteLine(calc(3, 4)); //Displays 7 


      calc = Multiply; 
      Console.WriteLine(calc(3, 4));//Displays 12 

     } 

     public static void Main() 
     { 

      //call and execute UseDelegate() 

     } 



    } 
} 

Это должно выводить выше результаты 7 и 12.Вызов делегата недоступен?

Функция делегат непосредственно не вызывать из основных в текущем состоянии.

  1. Почему делегат не может быть замечен из основного?
  2. Нужно ли создавать класс?
  3. Как следует вызывать функцию делегата?

ответ

1

Вы не вызываете метод вообще, и вы не можете сейчас, так как метод Main является статическим, а ваши методы - нет.

Я бы рекомендовал разделить свой код на второй класс, который проще позвонить. (Вместо того, чтобы все статические методы)

public class Assignment 
{ /* all code except the Main method goes here */ } 

Затем в методе Main, экземпляр экземпляр Assignment класса и вызвать UseDelegate:

public static void Main() 
{ 
    Assignment a = new Assignment(); 
    a.UseDelegate(); 

    Console.ReadKey(); // to prevent the console from closing immediate 
} 
2

Вы не можете вызвать нестатический метод от статического Метод, так что вы должны реализовать еще один класс, как

internal class Check 
{ 
    public delegate int Calculate(int x, int y); 

    public int Add(int x, int y) 
    { 
     return x + y; 
    } 

    public int Multiply(int x, int y) 
    { 
     return x * y; 
    } 

    public void UseDelegate() 
    { 
     Calculate calc = Add; 
     Console.WriteLine(calc(3, 4)); //Displays 7 

     calc = Multiply; 
     Console.WriteLine(calc(3, 4));//Displays 12 
    } 
} 

ваш вызов из вашего основного метода как

private static void Main(string[] args) 
     { 
      new Check().UseDelegate(); 
     } 
Смежные вопросы