This article has been localized into Russian by the community.
Метод расширения
Еще одна интересная особенность C# 3.0-это методы расширения. Они позволяют расширить существующий тип новым функционалом, без суб-класса или перекомпиляция старого типа. Например, вы могли бы знать, является ли определенная строка числом или нет. Обычный подход заключается в том, чтобы определить функцию, а затем вызывать ее каждый раз, и как только вы получите много таких функций, вы поместите их вместе в служебный класс, например:
public class MyUtils
{
public static bool IsNumeric(string s)
{
float output;
return float.TryParse(s, out output);
}
}
Теперь вы можете проверить строку выполнением строки кода:
string test = "4";
if (MyUtils.IsNumeric(test))
Console.WriteLine("Yes");
else
Console.WriteLine("No");
Однако с помощью методов расширения можно расширить класс String для непосредственной поддержки этого. Это делается путем определения статического класса с набором статических методов, которые будут являться библиотекой методов расширения. Вот пример:
public static class MyExtensionMethods
{
public static bool IsNumeric(this string s)
{
float output;
return float.TryParse(s, out output);
}
}
Единственное, что отделяет его от любого другого статического метода, это ключевое слово "this" в разделе параметров метода. Он сообщает компилятору, что это метод расширения для класса string, и это фактически все, что вам нужно для создания метода расширения. Теперь можно вызвать метод IsNumeric() непосредственно для строк, например:
string test = "4";
if (test.IsNumeric())
Console.WriteLine("Yes");
else
Console.WriteLine("No");