- Метод расширения
-
Для улучшения этой статьи по информационным технологиям желательно?: - Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
- Переработать оформление в соответствии с правилами написания статей.
- Дополнить статью (статья слишком короткая либо содержит лишь словарное определение).
Метод расширения (англ. extension method) в программировании — синтаксический сахар, для поддержки добавления метода к существующему классу. Введён в C# 3.0. Упрощает модификацию сторонних классов. Аналогичен использованию интерфейсов, но при этом не требует (не должен требовать) наследования изменяемого класса от интерфейса. Фактически — вид делегирования.
Синтаксис C#
/* Следующий пример показывает метод расширения, определённый для класса System.String (в языке C# имеет псевдомим string). Заметим, что он определён внутри невложенного и ненастраиваемого статичного класса: */ namespace ExtensionMethods { public static class MyExtensions { // метод WordCount принимает на вход строку, возвращает число слов, т.е. число подстрок, разделённых пробелом, точкой или вопросительным знаком. public static int WordCount(this string str) { return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; } } } /* Метод-расширение WordCount появится в области видимости, если подключить соответствующее пространство имён: */ using ExtensionMethods; /* Теперь его можно вызвать: */ string s = "Hello Extension Methods"; int i = s.WordCount(); // i получит значение 3 int j = "Съешь же ещё этих мягких французских булок, да выпей чаю.".WordCount(); // j получит значение 10
Код взят: http://msdn.microsoft.com/en-us/library/bb383977.aspx
В C#, если есть и встроенный метод, и расширение, приоритет даётся встроенному методу.
Синтаксис Ruby
class TestClass def method1 end def method2 end end test = TestClass.new test.method1 test.method2 class TestClass def method3 end end test.method3
В Ruby, если есть и встроенный метод, и расширение, приоритет дается расширенному методу.
Отличие от наследования
Наследование Метод расширения Практически неприменимо на чужих фреймворках и чужом коде со сложной структурой Применимо к любому коду Применимо только к объектам, от которых можно наследовать Применимо к объектам любого типа (в том числе sealed
, коим являетсяint
илиstring
в C#)Бывает виртуальным Не бывает виртуальным Категории:- Метод (информатика)
- Семейство языков программирования C Sharp
Wikimedia Foundation. 2010.