Я просто посмотрел на эту регистрацию: Каково лучшее или самое интересное использование Дополнительных Методов, которые Вы видели?
Я никогда не слышал о дополнительных методах. Они относятся к каждому языку?
Какой смысл их? В той конкретной регистрации я не понял примера.
Они доступны для C # и VB. Они позволяют имитировать добавление методов к классам, которые не находятся под вашим контролем.
Вы можете, например, добавить к строке метод WordCount
.
Итак, вместо
MyStringUtils.WordCount ("некоторая строка")
вы можете просто написать "некоторую строку" .WordCount ()
.
public static class MyExtensions
{
public static int WordCount(this String str)
{
return MyStringUtils.WordCount( str );
}
}
Это строго «синтаксический сахар», который способствует удобочитаемости. По сути, вы создаете статический метод, который будет отображаться в IntelliSense для целевого типа.
Нет, они не применимы к каждому языку. Это специфическая для каждого языка особенность, предложенная C# и Visual Basic (возможно, другие языки приняли их с тех пор, я не знаю).
Суть их в том, чтобы обеспечить удобный синтаксис для вызова служебных методов класса или интерфейса. В C# 2 полезный метод вызывался через статический класс, передавая аргумент обычным способом:
IEnumerable<string> someStrings;
int count = EnumerableHelpers.Count(someStrings);
С методами расширения это может быть написано более удобно, используя что-то похожее на обычный синтаксис метода-члена:
int count = someStrings.Count();
даже если Count() не является членом интерфейса IEnumerable
. Таким образом, методы расширения позволяют вам казаться добавлять члены в классы или интерфейсы, которые вы не контролируете.
применимы ли они ко всем языкам?
Нет, но у некоторых языков есть одни и те же функции, хотя и не обязательно под одним и тем же именем. Я знаю о Objective-C и Groovy , где функция называется «Категории».