Объясните дополнительные методы мне

Я просто посмотрел на эту регистрацию: Каково лучшее или самое интересное использование Дополнительных Методов, которые Вы видели?

Я никогда не слышал о дополнительных методах. Они относятся к каждому языку?

Какой смысл их? В той конкретной регистрации я не понял примера.

6
задан Community 23 May 2017 в 10:33
поделиться

3 ответа

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

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

Итак, вместо

MyStringUtils.WordCount ("некоторая строка")

вы можете просто написать "некоторую строку" .WordCount () .

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

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

5
ответ дан 8 December 2019 в 18:35
поделиться

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

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

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

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

int count = someStrings.Count();

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

7
ответ дан 8 December 2019 в 18:35
поделиться

применимы ли они ко всем языкам?

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

1
ответ дан 8 December 2019 в 18:35
поделиться