louis vuitton bag moncler jacka ugg boots mbt sko louis vuitton oslo moncler ugg www.steklo1.ru
   Поиск
 

Изучаем C Sharp (C#)

Программирование на C Sharp (C#) с нуля

Cи Шарп это просто Simple C#
Логин Пароль Вход Регистрация
Главная
Изучаем C#
Web-приложения
Win-приложения
Web-сервисы
ADO.NET
FrameWork
Алгоритмы
Исходники
Классы
Среда разработки
Статьи
Форум
FAQ
О Проекте
Обратная связь
Отблагодарить
Rambler's Top100

Делегаты

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

Делегат определяется так



public delegate void Play(object music, int volume);




так как в C Sharp все является классом то и делегат в момент компиляции превращается в класс, наследуемый от system.Multicastdelegate
Создадим класс Car в котором будет делегат и два метода



namespace ConsoleApplication3
{
    class Program
    {
        
        static void Main(string[] args)
        {
            car c = new car("BMW");
            garage gar = new garage();
            gar.ProcCar(new car.CarDelegate(Run));
            gar.ProcCar(new car.CarDelegate(Jump));
        }
        public static void Jump(car c)
        {
            Console.WriteLine("Jump");
        }
        public static void Run(car c)
        {
            Console.WriteLine("Run");
        }
    }
    class garage
    {
        car c;
        
        public garage()
        {
            c = new car("BMW");
        }
        public void ProcCar(car.CarDelegate proc)
        {
            Console.WriteLine(proc.Method.ToString());
            proc(c);
        }
    }
    class car
    {
        public delegate void CarDelegate(car c);
        string _name;
        public car(string name)
        {
            this._name = name;
        }
    }
}








Метод ProcCar передает управление двум статическим методам, то есть мы добавляем указатель на функцию Run во внутреннюю таблицу указателей делегата CarDelegate

Предыдущая стр.    Оглавление    Следующая стр.
Средняя оценка: (1,33 - 6 голосов)
Для оценки необходимо зарегистрироваться


Только зарегистрировавшиеся пользователи могут оставлять комментарии

Комментирует Silver_off 12.07.2010 15:08:12
Бля, а чого немає відкликів ((((

Комментирует Walker 13.09.2011 11:42:24
Непонятно. На фоне простоты предыдущих примеров этот и следующий выглядят странно.

Комментирует YaDima 19.11.2011 16:12:48
С точки зрения C++ это полнейший беспредел. Получается что тип "указатель на функцию" принимающюю объект типа car обьявленный в car, может присваивать "посторонюю функцию". Надо привыкнуть думать по сишарповски.

Комментирует YaDima 19.11.2011 16:21:30
И вообще странно это: gar.ProcCar(new car.CarDelegate(Run)); Эт чо одновременно создаётся безымянный car и тут же достаётся делегат и в скобках имя чужого метода а не обьект типа car. Блин очень странно ((( мистика какая-то =)

Комментирует YaDima 19.11.2011 16:29:58
Это ж ядрить колотить, если делегат получается класс то какой-то интересный конструктор принимающий имя метода! Страшно даже подумать что такое тогда в этом языке массив указателей на функцию.



Практический обучающий видео-курс "Основы C#"

От профессионального
разработчика для начинающих
и опытных программистов!

Кликните, чтобы изучить
язык C# с нуля и научиться
писать программы под платформу .NET!