TOC

This article has been localized into Russian by the community.

C# 3.0:

Метод расширения

Еще одна интересная особенность 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");

This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!