Метод расширения
Метод расширения - это static метод в
static классе: первый параметр помечают
ключевым словом this, и тогда метод
можно вызывать как член экземпляра. Так
расширяют string,
типы из List
и другие, к которым нет доступа для правки.
Это не свойства и не поля - только методы;
будущие extension-members другого вида здесь
не рассматриваем.
Синтаксис
static class ИмяExt
{
public static типRes Метод(this тип target, ...)
{
}
}
Пример
Давайте добавим метод к string
и вызовем его как член строки:
using System;
static class StringExt
{
public static string Repeat(this string str, int count)
{
string res = "";
for (int i = 0; i < count; i++)
{
res += str;
}
return res;
}
}
class Program
{
static void Main()
{
string str = "ab";
Console.WriteLine(str.Repeat(2));
}
}
Результат выполнения кода:
"abab"
Пример
Давайте сделаем расширение без Linq - через цикл:
using System;
static class StringExt
{
public static string TakeHead(this string str, int len)
{
if (len >= str.Length)
{
return str;
}
return str.Substring(0, len);
}
}
class Program
{
static void Main()
{
Console.WriteLine("abcde".TakeHead(3));
}
}
Результат выполнения кода:
"abc"
Пример
Давайте расширим свой класс методом подсчёта длины текста:
using System;
class Label
{
public string Text = "abcde";
}
static class LabelExt
{
public static int TextSize(this Label label)
{
return label.Text.Length;
}
}
class Program
{
static void Main()
{
var label = new Label();
Console.WriteLine(label.TextSize());
}
}
Результат выполнения кода:
5