Назад
Создание прибыльного бизнеспроекта на базе сайта

SEO + ASP.NET 4.0 + БИЗНЕСМОДЕЛЬ = ПРИБЫЛЬНЫЙ САЙТ

Инструмент быстрого построения прибыльного онлайн бизнеса своими силами без капиталовложений за 4 месяца все подробности на SEO + ASP.NET 4.0.

Подписка на рассылку

МАГИЯ C#!

Создание вебсайта с формой автоматического приема онлайн платежей по WebMoney!
Ваше имя
Ваш e-mail
Уроки по ASP.NET c# ADO.NET
     

18 видеоуроков
более 5 часов
по созданию сайта,
выполняющего
продажи ваших продуктов (физических/электронных) на полном автомате с личным оповещением на e-mail, а также ...
DVD-курс по C#, .NET

3 часть. Введение в ASP.NET. WebServices Профессиональная подготовка разработчика по языку C# на платформе .NET

asp.net webservices dvd c# gridview Гудок курс Более 65 подробных видео уроков по теоретическим основам технологии сайтостроения ASP.NET и процессу создания и использованию вебсервисов.

DVD-курс по C#, .NET

2А часть. XML/TXT в аспекте ADO.NET Профессиональная подготовка разработчика по языку C# на платформе .NET

xml txt dvd c# ADO ADO.NET Гудок курс 70 подробных видео уроков по работе с форматами xml, txt, по работе с файлами и директориями. Разработка высокоорганизованных свойств для значительного сокращения объема исходного кода и облегчения дальнейшей модификации и многое-многое другое...

DVD-курс по C#, .NET

1 часть. Windows Forms Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок

185 подробнейших уроков (70 часов) лекций в формате видеоуроков по теории языка c# и платформы .NET. Практическое закрепление теоретического материала на примере создания Windows Forms - приложения видеоигры "Tanks"

DVD-курс по C#, .NET

2 часть. ADO.NET/SQL Профессиональная подготовка разработчика по языку C# на платформе .NET

Профессиональная подготовка на c# А. Гудок ADO.NET sql

165 подробных видео уроков по созданию приложений распределенных баз данных на примере разработки проектов с использований технологий ADO.NET (Connected model, Disconnected model, Typed DataSet, ...)

Бодибилдинг
Программы тренировок для занятий штангой, гантелями; описание тренажеров

Я записываю курсы!
  Курс валют

НБУ курс евро






Делегаты и методы на c#



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

Для начала представьте, что нам необходимо в некоторый метод в качестве параметра передавать другой метод. Собственно, этого достаточно для объяснения необходимости в делегатах.

Итак, для объявления типа-делегата используется следующая конструкция

delegate void MyDelegate();

Указываем ключевое слово delegate, за ни тип возвращаемого значения того метода, который может быть передан в делегат. Остановимся пока на типе void. Далее указываем имя делегата и в паре скобок также можем указать несколько параметров, которые принимает целевой метод. В данном случае наш будущий метод не принмает параметров. Судя по сигнатуре только что созданного делегата мы можем сказать, что любой метод, который может быть передан в делегат не возвращает значения и не принимает ни одного параметра.

Далее, требуется создать объект нашего типа-делегата. Делается это обычным способом используя конструктор:

MyDelegate myDelegate = new MyDelegate(MyMethod);

Здесь в конструктор мы передали имя целевого метода. Заметьте, что мы не указываем всю сигнатуру метода, а лишь его имя. Данный делегат и так знает все о сигнатуре передаваемого ему метода. Более того, нельзя передать в делегат метод, сигнатура которого не соответствует заданной при объявлении типа-делегата.

Ну и для запуска целевого метода следует вызвать объект нашего делегата

myDelegate();

А теперь все вместе:

namespace ConsoleApplication1
{
    //создание типа-делегата
    delegate void MyDelegate();

    class Program
    {
        static void Main(string[] args)
        {
            //создание экземпляра делегата 
            //с передачей имени метода
            MyDelegate myDelegate = 
                new MyDelegate(MyMethod);
            //вызов метода делегата
            myDelegate();
        }

        static void MyMethod()
        {
            Console.WriteLine
                 ("Делегированный метод выполняется");
            Console.ReadKey();
        }
    }
}

Теперь совсем чуть-чуть изменим наш пример для демонстрации работы делегата с методами иной сигнатуры:

namespace ConsoleApplication1
{
    //создание типа-делегата
    delegate string MyDelegate(int i);

    class Program
    {
        static void Main(string[] args)
        {
            //создание экземпляра делегата 
            //с передачей имени метода
            MyDelegate myDelegate = 
                new MyDelegate(MyMethod);
            //вызов метода делегата
            string result = myDelegate(5);
            Console.WriteLine(result);
            Console.ReadKey();
        }

        static string MyMethod(int p)
        {
            return p.ToString();
        }
    }
}

Как видим результаты предсказуемы:

Рис 1. Результаты работы программы

Здесь мы объявили тип-делегат, который может вызывать методы, принимающие один параметр типа int и возвращающие тип string. Кстати, если метод принимает несколько парамемтров, то в делегате они указываются через запятую, точно как в методе. И самое интересное – вызов целевого метода через делегат:

 string result = myDelegate(5);
 

Как видим, мы указали значение входного параметра для целевого метода и получили результат работы метода.

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



Больше информации читайте по теме:



Оценить статью:

Оценивая статью, Вы подсказываете нам насколько данная информация стала полезной именно для Вас. Мы ожидаем, прежде всего, оценку доступности материала для понимания и простоты его изложения. Дополнительные комментари, вопросы, дополнения и замечания Вы можете указать на странице От Вас

Частичное, или полное копирование материала данной статьи возможно лишь при размещении ссылки на данную страницу.


            
        


        Прохожий    22.03.2010 22:47:30
        

А возможно ли несколько параметров передавать в делега?


        Другой прохожий    14.07.2010 18:57:26
        

Можно. Только не в делегат, а в метод при передаче его через объект делегата delegate void Iobject sender, EventArgs eI


        Третий прохожий    11.02.2011 15:07:43
        

Не сказано о анонимных методах, который также используют делегаты


        4 ПРОХОЖИЙ    31.03.2011 17:32:54
        

я думал что метод - это не статическая функция =\

80.94.164.204


        Андрей    10.11.2011 17:37:33
        

Хотелось бы увидеть в сатье ещё про хотябы последовательный вызов 1 делегати но 2 и больше методов.

95.132.53.81




Имя:  


Текст комментариев (не больше 600 знаков):  
введите не более 600 знаков



Введите символы с картинки:
Капча имеет "срок годности". Поэтому, если необходимо обновите страницу.



Черный список покупателей
c# курс Гудок   курс по ASP.NET Гудок   курс по ADO.NET Гудок   курс по XML txt Гудок   курс по рефлексии и многопоточности Гудок