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

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#



Методы расширения позволяют "добавлять" методы в существующие типы без создания нового производного типа, перекомпиляции или иного изменения исходного типа. Методы расширения являются особым видом статического метода, но они вызываются, как если бы они были методами экземпляра в расширенном типе. Для клиентского кода, написанного на языке C#, нет видимого различия между вызовом метода расширения и вызовом методов, фактически определенных в типе. Для того чтоб создать такой метод, нужен статический класс.

Вот пример статического класса, в котором есть метод расширения:

namespace ExtensionMethods
{
    static class ExtensionClass
    {
        /// <summary>
        /// метод расширения
        /// </summary>
        /// <param name="list">
        /// коллекцыя продуктов</param>
        /// <returns>возвращяет суму 
        /// цен всех товаров</returns>
        public static decimal Get_SumPrise(this List<Product> list)
        {
            decimal sum = 0;
            foreach(Product pr in list)
                sum += pr.Price;

            return sum;
        }
}

По сути дела, это может и запутано, но на самом деле, все очень просто. Здесь ключевое слово this в списке параметров и делает этот метод методом расширения. При вызове этого метода через объектную ссылку не нужно передавать параметров, по сколку this в списке параметров указывает на самого себя.

List<Product> productList = new List<Product>();
productList.Add(new Product("Ноутбук", 600, 505));

А вот собственно и вызов этого метода:

Console.WriteLine("Сума всех цен для продажы: {0}",
    productList.Get_SumPrise());

Можно сделать вызов метода, используя полное квалифицированное имя, то есть имя класса и метод, но в этом случае надо передавать параметр!

Вот весь код:

using System;
using System.Collections.Generic;


namespace ExtensionMethods
{
   class Program
   {
      static void Main(string[] args)
      {
         List<Product> productList = new List<Product>();
         productList.Add(new Product("Ноутбук",600,505));
         productList.Add(new Product("Музыкальный центр",100,102));
         productList.Add(new Product("ДВД",300,225));
         productList.Add(new Product("Ноутбук",600,505));

         Console.WriteLine("Сума всех цен для продажы: {0}",
             productList.Get_SumPrise());

         Console.WriteLine("Сума всех закупочных цен: {0}",
             productList.Get_SumPurchase_price());

         Console.WriteLine("Если все продать, 
             прибыль будет состовлять: {0}", 
             productList.Get_Income());

         Console.ReadLine();

      }
   }
}

static class ExtensionClass
{
    /// <summary>
    /// метод расширения
    /// </summary>
    /// <param name="list">
    /// коллекцыя продуктов</param>
    /// <returns>возвращяет суму цен всех товаров</returns>
    public static decimal Get_SumPrise(this List<Product> list)
    {
        decimal sum = 0;
        foreach (Product pr in list)
            sum += pr.Price;

        return sum;
    }

    /// <summary>
    /// метод расширения
    /// </summary>
    /// <param name="list">коллекцыя продуктов</param>
    /// <returns>возвращяет суму закупочных цен всех
    /// товаров</returns>
    public static decimal Get_SumPurchase_price(
        this List<Product> list)
    {
        decimal sum = 0;
        foreach (Product pr in list)
            sum += pr.Purchase_price;

        return sum;
    }


    /// <summary>
    /// метод расширения
    /// </summary>
    /// <param name="list">коллекцыя продуктов</param>
    /// <returns>прибыль</returns>
    public static decimal Get_Income(this List<Product> list)
    {
        // сума цен для продажы
        decimal d1 = list.Get_SumPrise(); 
        //сума закупочных цен
        decimal d2 = list.Get_SumPurchase_price(); 

        return d1 - d2; // прибыль, если все продать
    }
}


class Product
{
    decimal price;  // цена для продажы
    decimal purchase_price; // закупочная цена
    string proudctName; // название продукта

    /// <summary>
    /// конструктор с параметрами
    /// </summary>
    /// <param name="proudctName">название продукта</param>
    /// <param name="price">цена для продажы</param>
    /// <param name="purchase_price">закупочная цена</param>
    public Product(string proudctName, 
        decimal price, decimal purchase_price)
    {
        this.price = price;
        this.purchase_price = purchase_price;
        this.proudctName = proudctName;
    }

    public string ProudctName
    {
        get { return proudctName; }
        set { proudctName = value; }
    }

    public decimal Price
    {
        get { return price; }
        set { price = value; }
    }

    public decimal Purchase_price
    {
        get { return purchase_price; }
        set { purchase_price = value; }
    }
}

Методы расширения в c#

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

Если посмотреть что высвечивает intellisense при вызове метода, то увидим что, методы расширения помечены стрелкой в низ:

Методы расширения в Visual Studio



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

Использование делегатов в событиях на C# - Часть 2
Использование делегатов в событиях на 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 Гудок   курс по рефлексии и многопоточности Гудок