Можете ли вы добавить методы расширения, которые вы вызываете, как статические методы? - PullRequest
4 голосов
/ 07 октября 2010

Согласно Microsoft, «методы расширения являются особым видом статического метода, но они вызываются так, как если бы они были методами экземпляра для расширенного типа».

Есть ли способ добавить метод расширения, которыйэто называется, как если бы это был статический метод?Или сделать что-то еще с тем же эффектом?

Редактировать: под этим я подразумеваю «вызывается так, как если бы это был статический метод в расширенном классе».Извините за двусмысленность.

Ответы [ 2 ]

13 голосов
/ 07 октября 2010

Согласно 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.

Edit:

Есть ли способ добавить метод расширения, который вызывается так, как если бы он был статическим методом?

Вы хотите сказать, что хотите вызвать, например, string.MyExtensionMethod ()? В этом случае нет, сделать это невозможно.

4 голосов
/ 07 октября 2010

Методы расширения являются статическими методами. Вам не нужно ничего делать.

Единственное, что отличает метод расширения от любого другого статического метода, это то, что он может быть вызван так, как если бы он был методом экземпляра , в дополнение к тому, что обычно вызывается как статический метод.

...