Можете ли вы добавить методы расширения, которые вы вызываете, как статические методы?
Согласно Microsoft, "методы расширения являются особым видом статического метода, но они вызываются так, как если бы они были методами экземпляра для расширенного типа".
Есть ли способ добавить метод расширения, который вызывается так, как если бы это был статический метод? Или сделать что-то еще, что имеет тот же эффект?
Изменить: под этим я подразумеваю "вызывается так, как если бы это был статический метод в расширенном классе". Извините за двусмысленность.
2 ответа
Согласно Microsoft, "методы расширения являются особым видом статического метода, но они вызываются так, как если бы они были методами экземпляра для расширенного типа".
Да, методы расширения являются статическими. Все они могут вызываться обычным способом как статические методы, как методы экземпляра расширения для типа, который они "расширяют", и они могут даже вызываться как методы расширения по нулевой ссылке.
Например:
public static class Extensions {
public static bool IsNullOrEmpty(this string theString) {
return string.IsNullOrEmpty(theString);
}
}
// Code elsewhere.
string test = null;
Console.WriteLine(test.IsNullOrEmpty()); // Valid code.
Console.WriteLine(Extensions.IsNullOrEmpty(test)); // Valid code.
Редактировать:
Есть ли способ добавить метод расширения, который вызывается так, как если бы это был статический метод?
Вы имеете в виду, например, что хотите вызвать string.MyExtensionMethod()? В этом случае нет, нет способа сделать это.
Методы расширения являются статическими методами. Вам не нужно ничего делать.
Единственное, что отличает метод расширения от любого другого статического метода, это то, что его можно вызывать так, как если бы он был методом экземпляра, в дополнение к тому, что он обычно вызывается как статический метод.