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

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# - Часть 2



Статья располагается на двух страницах. Первая часть Использование делегатов в событиях на c#.

Теперь приступим к написанию класса Bank:

class Bank
{
    private int personID;   // айдишник персоны
    private decimal bank_account; // счет в банке

    /// <summary>
    /// сигнатура делегата
    /// </summary>
    /// <param name="user">обьект
    /// который возбудил событие>/param>
    /// <param name="ment">обьект класса SecurytyMonitor
    /// который унаследован от класса EventArgs</param>
    public delegate void MyDelegate
        (object user, SecurytyMonitor ment);

    /// <summary>
    /// событие типа делегата MyDelegate
    /// </summary>
    public event MyDelegate OnStop;


    /// <summary>
    /// конструктор с двумя параметрами
    /// </summary>
    /// <param name="personID">айдишник персоны</param>
    /// <param name="bank_account">деньги, 
    /// которые ложим в банк>/param>
    public Bank(int personID, decimal bank_account)
    {

        // если сума (bank_account) меньше 0, возбуждаем событие
        if (bank_account < 0)
        {
            // Создаем объект класса SecurytyMonitor
            // и формируем текстовое сообщение 
            SecurytyMonitor sc = new SecurytyMonitor(
            "Сума которую можно положить на счет " +
                 "не должна быть Меньше 0$");

            // вызываем метод который подпишет наше событие
            // в качестве параметра передаем объект,
            // который возбудил событие
            sc.DoEvent(this);

            // this - обьект который возбудил событие
            // sc - обьект класса SecurytyMonitor
            OnStop(this, sc);
        }
        else // иначе все в порядке, устанавливаем значения
        {
            this.personID = personID;
            this.bank_account = bank_account;
        }
    }

    /// <summary>
    /// выводим на екран
    /// </summary>
    public void Show()
    {
        Console.WriteLine("Unique ID: {0};\nBank account: {1};\n",
            this.personID, this.bank_account);
    }

    /// <summary>
    /// метод для снятия денег со счета
    /// </summary>
    /// <param name="money"<сума, которою надо снять</param>
    public void TakeOfMony(decimal money)
    {
        // если указаная сума (money) больше
        // чем есть на счету, возбуждаем событие
        if (money > this.bank_account)
        {
            // Создаем обьект класса SecurytyMonitor
            // и формируем текстовое сообщение 
            SecurytyMonitor sc = new SecurytyMonitor(
            "Максимальная сума которую Вы можете снять " +
            "со своего счета составляет:" + this.bank_account);

            // вызываем метод который подпишет наше событие
            // в качестве параметра передаем обьект 
            // который возбудил событие
            sc.DoEvent(this);

            // this - обьект который возбудил событие
            // sc - обьект класса SecurytyMonitor
            OnStop(this, sc);
        }
        else // все впорядке, снимаем деньги            
            this.bank_account = bank_account - money;
    }
}

Первый параметр, это объект, который возбудил событие, второй параметр, это обьект класса SecurytyMonitor который унаследован от класса EventArgs. А вот и сам класс SecurytyMonitor:

class SecurytyMonitor:EventArgs
{
    private string message; // сообщение

    /// <summary>
    /// свойство для чтения сообщения
    /// </summary>
    public string Message
    {
        get { return message; }
    }

    /// <summary>
    /// конструктор с одним параметром
    /// </summary>
    /// <param name="msg"<текстовое сообщение</param>
    public SecurytyMonitor(string msg) 
    {
        message = msg;
    }

    /// <summary>
    /// подписывает событие на метод, 
    /// который вызывается при возбуждение события
    /// </summary>
    /// <param name="b">
    /// обьект класса Bank, 
    /// с помощью которго мы доступаемся к событию
    /// </param>
    public void DoEvent(Bank b)
    { 
        b.OnStop+= new Bank.MyDelegate(Display);
    }

    /// <summary>
    /// выводит сообщение, полученое при возбуждение события
    /// </summary>
    /// <param name="o">обьект который возбудил событие </param>
    /// <param name="sc">обьект класса  SecurytyMonitor,
    /// который унаследован от EventArgs
    /// </param>
    public void Display(object o, SecurytyMonitor sc)
    {
        Console.WriteLine(sc.Message);
    }
}

В этом классе объявлено событие OnStop и класс делегата описанный ранее. Как видим, что при создание счета, происходит проверка, прежде чем наполнить счет деньгами. Так же, в этом классе определен метод, который дает возможность снять деньги со счета. В этом методе проверяется наличие денег на счету и сума, которую указал объект. Если сума больше чем денег на счету, возбуждается событие! Как в первом случае при внесение денег на счет, так и во втором, при снятие со счета, вызывается метод DoEvent(Bank b) класса SecurytyMonitor, в который передается объект класса Bank, с помощью которого, мы доступаемся к событию OnStop класса Bank, и подписываем его на метод Display() класса SecurytyMonitor.

Вот клиентская часть Main():

using System;

namespace UseEvent
{
    /// <summary>
    /// класс в котором определена точка входа в программу
    /// </summary>
    class Program
    {
        /// <summary>
        /// точка входа в програму
        /// </summary>
        static void Main()
        {
            // создаем счет в банке
            Bank myBank = new Bank(1, -10);            
            myBank.Show(); // выводим

            // создаем счет в банке 
            Bank myBank2 = new Bank(2, 199); 
            myBank2.Show(); // выводим

            // пробуем снять больше чем возможно
            myBank2.TakeOfMony(200);
            
            // задержываем екран
            Console.ReadLine();
        }
    }
}

События в c#

В коде написаны тройные комментарии, с помощью которых мы можем спокойно с помощью Visual Studio просмотреть в виде документации. Для этого едем в пункт меню View->Object Browser:

События в c# делегат

Делегаты в c#

Возможно, пример с банком не самый удачный способ показать события, но суть не в банке. Суть в самом использование делегатов используемых события!

Вторая часть Использование делегатов в событиях на c#



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

Использование делегатов в событиях на C#
Автозапуск программы в C#
Обобщенные делегаты на C#
Регулярные выражения в c#
c# - сортировка List<T>
Пространства имен в c#
c# - Использование Shell (для получения списка файлов/папок)
Методы классов Math и Random в c#
Строковые массивы класса string в c#
c# - Символьные массивы
Массивы в C#
Операторы языка C#
Операции языка C# и особенности их использования
Шифрование на c# (хеш-код строки по алгоритму MD5)
Отписка от событий в c#
Примеры регулярных выражений на c# (класс RegularExpressions.Regex)
c# - итератор для списка Dictionary (foreach для словаря)
Перемешивание списков (массивов) любых типов на c# - противоположность сортировки
c# - CultureInfo (IFormatProvider) и конвертация, приведение числовых типов
Работа в c# с DateTime - получение набора дат в текущем году
GZip - архивация (упаковка) файлов на c#
DateTime - пример определения даты и времени
Время выполнения операций c#
Паттерн (шаблон) SingleTon средствами c#
Обобщенная коллекция Dictionary
c# структуры - не классы?! А что же это - struct VS class
Создание пользовательских событий на c#
Выборка файлов из директории и поддиректорий на c#
Делегаты и методы на c#
Запуск одного экземпляра приложения на c#
c# - Битовый флаг enum



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

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

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


            
        




Имя:  


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



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



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