Пожалуйста, объясните мне методы расширения - PullRequest

Ответы [ 3 ]

7 голосов
/ 06 марта 2010

Нет, они не распространяются на все языки.Они являются языковой функцией, предлагаемой C # и Visual Basic (другие языки, возможно, приняли их с тех пор, я не знаю).

Суть в том, чтобы предоставить удобный синтаксис для вызова служебных методовна классе или интерфейсе.В C # 2 служебный метод вызывается через статический класс, передавая аргумент обычным способом:

IEnumerable<string> someStrings;
int count = EnumerableHelpers.Count(someStrings);

С помощью методов расширения это можно написать более удобно, используя что-то, похожее на обычный метод-членсинтаксис:

int count = someStrings.Count();

, хотя Count () не является членом интерфейса IEnumerable<string>.Таким образом, методы расширения позволяют показывать добавление членов к классам или интерфейсам, которые вы не контролируете.

5 голосов
/ 06 марта 2010

Они доступны для C # и VB. Они позволяют имитировать добавление методов к классам, которые не находятся под вашим контролем.

Вы можете, например, добавить в строку метод WordCount.

Так что вместо

MyStringUtils.WordCount( "some string" )

Вы могли бы просто написать "some string".WordCount().

public static class MyExtensions
{
    public static int WordCount(this String str)
    {
        return MyStringUtils.WordCount( str );
    }
} 

Это строго "синтаксический сахар" и помогает в удобочитаемости. По сути, вы создаете статический метод, который будет показан в IntelliSense для целевого типа.

1 голос
/ 06 марта 2010

относятся ли они к каждому языку?

Нет, но некоторые языки имеют одинаковую функцию, хотя и не обязательно под тем же именем. Я знаю о Objective-C и Groovy , где эта функция называется "Категории".

...