вызов статического метода с экземпляром класса.Зачем? - PullRequest
1 голос
/ 26 марта 2011

Это небольшой фрагмент кода, который я нашел.когда мы делаем вызов

    object.Max(s=>s.Length)

зачем нам статический метод?

    public static TResult Max<TSource, TResult>(
        this IEnumerable<TSource> source,
        Func<TSource, TResult> selector)
    {
        return source.Select(selector).Max();
    }

, пожалуйста, обновите название вопроса.Я не мог хорошо это абстрагировать.

1 Ответ

2 голосов
/ 26 марта 2011

Это метод расширения (через модификатор this для первого параметра).Вместо этого obj. передается в качестве первого аргумента.Итак:

obj.Max()

идентичен:

DeclaringType.Max(obj, s=>s.Length)

Но обратите внимание, что подлинные методы экземпляра всегда имеют приоритет во время статического анализа, поэтому, если у объекта был подходящийMax метод сам , он будет выбран вместо метода расширения.

Методы расширения должны быть статическими методами для не вложенных статических классов.

...