Программирование C#, Java, Net - фото

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


Оцените данную статью

Сегодня поговорим о методах расширения в языке программирования C#, которые появились в .Net 3.

Методы расширения, как можно догадаться из названия, это такие методы, которые можно добавить к уже существующему классу, как будто они являются элементами этого класса. Нет необходимости создавать производный тип путем наследования, перекомпилировать исходный класс и т.д. Грубо говоря, метод расширения — это некая надстройка над классом, которая позволяет вам работать с ним, как с методом данного класса.

Рассмотрим наши методы расширения на примере добавления новой функциональности к классу List. Итак, для начала посмотрим, какие методы и свойства уже есть в коллекции List. В Visual Studio набираем следующий код:

    1. using System.Collections.Generic;
    2. List<int> someNewList = new List<int>();
    3. someNewList.

После экземпляра класса someNewList ставим точку и в выпадающем списке смотрим что там есть.
А теперь к этому коду добавляем пространство имен Linq, чтобы получилось следующее:

    1. using System.Collections.Generic;
    2. using System.Linq;
    3. List<int> someNewList = new List<int>();
    4. someNewList.

И опять же после someNewList ставим точку и смотри что же там изменилось. Вы должны увидеть следующую картину.

Теперь к уже существующим методам и свойствам класса List, добавились дополнительные методы. В выпадающем списке рядом с именами этих методов стоит значок — фиолетовый кубик с синей стрелочкой вниз. Это и есть методы расширения. Так их можно распознать в Visual Studio.
Теперь давайте добавим один метод расширения к классу List. Он будет возвращать максимальный элемент коллекции List<int>. Вот пример кода, решающий данную задачку:

    1. using System;
    2. using System.Collections.Generic;
    3. namespace ConsoleTesting
    4. {
    5.     class Program
    6.     {
    7.         static void Main(string[] args)
    8.         {
    9.             List<int> someNewList = new List<int>();
    10.             someNewList.Add(1);
    11.             someNewList.Add(2);
    12.             someNewList.Add(3);
    13.  
    14.             int max = someNewList.GetMaxValue();
    15.             Console.WriteLine(«Max Value = {0}», max);
    16.             Console.ReadKey();
    17.         }
    18.     }
    19.  
    20.     static class IntListExtensionMethods
    21.     {
    22.         static public int GetMaxValue(this List<int> list)
    23.         {
    24.             int max = list[0];
    25.             foreach (int value in list)
    26.             {
    27.                 if (max < value)
    28.                     max = value;
    29.             }
    30.             return max;
    31.         }
    32.     }
    33. }

Основное условие для методов расширения то, что они должны быть статическими и определены в статическом классе. Поэтому у нас класс IntListExtensionMethods, в котором определен статический публичный метод расширения GetMaxValue, является статическим. А основное что делает GetMaxValue методом расширение — это ключевое слово this, которое написано вначале списка аргументов. this как бы говорит компилятору, что данный метод можно использовать как метод расширения класса List содержащих целочисленные значения.
На этом буду заканчивать статью, надеюсь она была вам полезна.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *