Добавление методов в существующие классы

Оценить
(0 голоса)

Теперь вы можете добавить к существующему типу индивидуальные особенности (как буд­то он всегда их имел). Таким образом, вам не придется перекомпилировать данный объект, не придется вам также создавать второй (производный) объект для добавления этих особен­ностей. Более того, вы можете добавить в существующий объект метод (при помощи ис­пользования новой функциональной возможности компилятора под названием методы расширения (extension methods).

В языках VB и C# это делается несколько по-разному. В VB вы сначала импортируете в ваш кодовый файл пространство имен System. Runtime. CompilerServices. Затем помечаете нужную процедуру Sub или функцию Function директивой <Extension () >. И наконец,

пишете новую Sub или Function, где первый параметр нового метода— это тот тип, кото­рый вы хотите расширить. Далее показан пример. В этом примере мы расширяем тип Integer новым методом с названием DoublelnSize:

Imports System.Runtime.CompilerServices

Public Module IntegerExtensions <Extension()> _

Public Function DoublelnSize(ByVal i As Integer) As Integer Return i + i End Function End Module

Компилятору C# подобный импорт или атрибут метода не нужны. Вместо этого вы сначала создаете статический класс. Затем создаете статический метод, который вы собираетесь ис­пользовать в качестве расширения. Первый параметр вашего метода расширения должен быть тем типом, который вы хотите расширить. Кроме того, вы применяете модификатор this к этому типу. Обратите внимание на следующий пример. В нем мы расширяем тип данных int новым методом DoublelnSize.

namespace IntegerExtensions {

public static class IntegerExtensions!

public static int DoublelnSize(this int i) { return i+i;

}

}

}

Для использования метода расширения вы должны сначала импортировать в проект (при помощи using в языке С#) новые методы расширения. Затем вы можете вызывать любой новый метод так, как будто он всегда существовал в данном типе. Далее приводится пример на VB и С#. В этом случае функция DoublelnSize (которая была добавлена в предыдущем примере) вызывается из класса integer (int).

□    VB:

Imports IntegerExtensions

Module Modulel Sub Main()

Dim i'As Integer = 10

Console.WriteLine(i.DoublelnSize.ToString())

End Sub End Module

□    C#:

using IntegerExtensions;

namespace CsEnhancements {  ,

class Program {

static void Main(string[] args) { int i = 10;

Console.WriteLine(i.DoublelnSize().ToString());

}

}

}

Создание экземпляра несуществующего класса
Добавление бизнес-логики в сгенерированный код
Разбиение сборки на несколько файлов
Работа с XML непосредственно в коде
Удаление неиспользуемых аргументов из обработчиков событий (только для VB)

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


Защитный код
Обновить

© 2017 www.visualstudios.ru. Все права защищены.