Latest web development tutorials

C # делегат (делегат)

C # Главный (делегат), подобный указатель функции C или C ++.Главный (делегат) есть метод для переменной ссылочного типа ссылок.Ссылка может быть изменен во время выполнения.

Главный (делегат), специально предназначенные для проведения мероприятий и методов обратного вызова. Все делегат (делегат) являются производными от классаSystem.Delegate.

Заявление комиссии (делегат)

Прокси заявление определяет способ может быть, на который ссылается делегат. Делегат может указать на метод, имеющий ту же метку.

Например, предположим, что у вас есть делегат:

Открытый делегат INT MyDelegate (строка s);

Выше комиссия может быть использовано для обозначения любого метода , который принимает один параметрстрокуи возвращает переменную типаINT.

Синтаксис объявления введен в эксплуатацию следующим образом:

делегат <возвращаемый тип> <имя-делегат> <список параметров>

Примеры комиссии (делегат)

После того, как объявлен тип делегата, объект делегат должен использоватьновое ключевое слово , чтобы создать, и с конкретными методами.При создании параметра делегат передается вновое заявление как вызов метода, как и письменной форме, но без аргументов.Например:

Открытый делегат printString недействительными (строка s);
...
printString PS1 = новый printString (WriteToScreen);
printString ps2 = новый printString (WriteToFile);

Следующий пример демонстрирует заявление Комиссии, экземпляры и использовать, делегат может использоваться для ссылки на метод с целочисленным аргументом и возвращает целое значение.

с помощью системы;

делегировать Int NumberChanger (Int N);
пространство имен DelegateAppl
{
   класс TestDelegate
   {
      статические INT Num = 10;
      открытые статические INT AddNum (целое р)
      {
         Num + = р;
         вернуть Num;
      }

      открытые статические INT MultNum (INT д)
      {
         Num * = д;
         вернуть Num;
      }
      открытые статические INT GetNum ()
      {
         вернуть Num;
      }

      статической силы основных (String [] агдз)
      {
         // Создание экземпляра делегата NumberChanger NC1 = новый NumberChanger (AddNum);
         NumberChanger ПС2 = новый NumberChanger (MultNum);
         // Вызов метода с помощью объекта делегата NC1 (25);
         Console.WriteLine ( "Значение Num: {0}", GetNum ());
         ПС2 (5);
         Console.WriteLine ( "Значение Num: {0}", GetNum ());
         Console.ReadKey ();
      }
   }
}

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

Значение Num: 35
Значение Num: 175

По заказу многоадресной рассылки (Multicasting делегата)

Объект-делегат может использовать оператор "+" для слияния. Делегат назвать его слияния объединить два делегата. Только тот же тип доверия могут быть объединены. Оператор "-" может быть использован для удаления компонента из объединенного делегата делегата.

Используйте это полезная функция по заказу, вы можете создать список делегат вызывает метод, когда она вызывается для вызова. Это называется делегированымногоадресной (многоадресную), также известный как многоадресная.Следующая программа демонстрирует групповой делегат:

с помощью системы;

делегировать Int NumberChanger (Int N);
пространство имен DelegateAppl
{
   класс TestDelegate
   {
      статические INT Num = 10;
      открытые статические INT AddNum (целое р)
      {
         Num + = р;
         вернуть Num;
      }

      открытые статические INT MultNum (INT д)
      {
         Num * = д;
         вернуть Num;
      }
      открытые статические INT GetNum ()
      {
         вернуть Num;
      }

      статической силы основных (String [] агдз)
      {
         // Создание экземпляра делегата NumberChanger пс;
         NumberChanger NC1 = новый NumberChanger (AddNum);
         NumberChanger ПС2 = новый NumberChanger (MultNum);
         пс = NC1;
         NC + = NC2;
         // Вызов многоадресного NC (5);
         Console.WriteLine ( "Значение Num: {0}", GetNum ());
         Console.ReadKey ();
      }
   }
}

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

Значение Num: 75

Основные (делегатов) использует

Следующий пример демонстрирует использование делегирования. ОсновнаяprintStringиспользоваться для ссылки на метод со строкой в качестве входных данных и не возвращает ничего.

Мы используем этот делегат назвать два метода, первую строку, выводимой на консоль, а вторую строку для печати в файл:

с помощью системы;
использованием System.IO;

пространство имен DelegateAppl
{
   класс PrintString
   {
      статические фс FileStream;
      статическая StreamWriter ЮЗ;
      // Proxy заявление общественного делегата недействительными printString (строка s);

      // Этот метод выводит на консоль государственной статической силы WriteToScreen (строка строка)
      {
         Console.WriteLine ( "Строка: {0}", ул);
      }
      // Этот метод печатает в файл государственной статической силы WriteToFile (строка s)
      {
         фс = новый FileStream ( "C: \\ message.txt",
         FileMode.Append, FileAccess.Write);
         SW = новый StreamWriter (фс);
         sw.WriteLine (s);
         sw.Flush ();
         sw.Close ();
         fs.Close ();
      }
      // Этот метод делегата в качестве параметра, и использовать его для вызова метода государственной статической силы sendString (printString пс)
      {
         пс ( "Hello World");
      }
      статической силы основных (String [] агдз)
      {
         printString PS1 = новый printString (WriteToScreen);
         printString ps2 = новый printString (WriteToFile);
         sendString (PS1);
         sendString (PS2);
         Console.ReadKey ();
      }
   }
}

Когда приведенный выше код компилируется и выполняется, он дает следующие результаты:

Строка: Hello World