Программа делегатов - PullRequest
       1

Программа делегатов

3 голосов
/ 12 января 2011

Я сделал очень простую программу Делегатов.Я понятия не имею, почему он показывает ошибку, хотя я сравнил ее с той, что приведена в библиотеке MSDN, она такая же, как и в MSDN, все еще не скомпилирована .. ошибка говорит:в текущем контексте "и то же самое для другого метода .. Вычтите.Пожалуйста, помогите мне найти, в чем проблема ..

namespace DelegatePrac
{   
   public delegate void One(int a, int b); 
    public class Some
     {
  static void Add(int a, int b)
       { 
      int c = a + b;    Console.WriteLine("{0}",c);
       }
       static void Subtract(int a, int b)
       { int c = a - b;  Console.WriteLine("{0}",c);
       }

    }

    class Program
    {
        static void Main(string[] args)
        {
            One o1,o2;
            o1 = Add;//gives error here
            o2 = Subtract;//and here!!
            o1(33,44);
            o2(45, 15);
         Console.ReadLine();
        }
    }
}

Я перешел по этой ссылке - http://msdn.microsoft.com/en-us/library/ms173175.aspx

Спасибо

Ответы [ 3 ]

8 голосов
/ 12 января 2011

Вы должны увидеть сообщение компилятора:

Имя 'Добавить' не существует в текущем контексте

, которое говорит вам, что оно не имеет ни малейшего понятия, что Add метод, о котором вы говорите;Add - это статический метод в Some, поэтому вам необходимо:

o1 = Some.Add;
o2 = Some.Subtract;

статические методы не доступны глобально;Вы можете получить доступ к статическим методам из текущего типа (и из базовых типов) только через их имя, но если это не связанный тип, вам нужно квалифицировать его как декларирующий тип.

В этот момент вам выдаст ошибку компилятора:

DelegatePrac.Some.Add (int, int) недоступен из-за уровня защиты

, которыйнамекает, что это приватный метод;поэтому добавьте к ним public (или internal):

public static void Add(int a, int b) {...}
2 голосов
/ 12 января 2011

Две вещи:

  • Вам нужно пометить Add и Subtract как public.
  • Они не являются частью class Program. Поэтому при использовании их в других классах, отличных от Some, необходимо указать, что они являются частью Some, используя Some.Add и Some.Subtract.

Исправленный код:

namespace DelegatePrac
{   
    public delegate void One(int a, int b); 

    public class Some
    {
        public static void Add(int a, int b)
        { 
            int c = a + b;    Console.WriteLine("{0}",c);
        }

        public static void Subtract(int a, int b)
        { 
            int c = a - b;  Console.WriteLine("{0}",c);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            One o1,o2;
            o1 = Some.Add;//gives error here
            o2 = Some.Subtract;//and here!!
            o1(33,44);
            o2(45, 15);
            Console.ReadLine();
        }
    }
}
2 голосов
/ 12 января 2011

Вы пытались заменить эти две строки ошибками?

o1 = Some.Add;
o2 = Some.Subtract;

Вы не опубликовали свою ошибку, но у класса Program нет методов Add или Subtract, так что я думаю,ваша ошибка в том, что Add и Subtract не найдены.

РЕДАКТИРОВАТЬ

И как ssd сказал в своем ответе, статические методы должны быть public быть доступным вне класса.Вы не указали ни одного модификатора доступа, поэтому методы по умолчанию будут иметь значение private.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...