Method group?
От: Аноним  
Дата: 15.07.08 11:19
Оценка:
Расскажите что есть сабж?

обственно решарпер предложил рефакторинг (Convert to method group) которому я очень удивлся:

void UpdateItem(Item item) {}

IEnumerable<Item> items = ...

// было
items.ForEach(x => UpdateItem(item));
// стало
items.ForEach(UpdateItem);
Re: Method group?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 15.07.08 11:41
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Расскажите что есть сабж?


7.1 Expression classifications
....
A method group, which is a set of overloaded methods resulting from a member lookup.


Группа методов — множество перегруженных методов, возникшее как результат member lookup, то есть поиска членов типа с указанным именем. Группа методов почти всегда в дальнейшем подвергается overload resolution, который выбирает из нее единственный метод.
Re: Method group?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 15.07.08 11:51
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Расскажите что есть сабж?


using System;

class A
{
    void Foo() { }
    void Foo(int x) { }

    void Bar()
    {
        this.Foo();
        (this.Foo)();
        Action f = this.Foo;
        bool y = this.Foo is int;
    }
}


В каждой строке this.Foo — это method group, состоящая из 2 методов. В первых трех случаях выполняется overload resolution, который выбирает один метод. В последнем случае overload resolution не выполняется, так как использование method group в операторе is всегда дает false.

А решарпер просто предлагает сократить запись, уменьшая уровень косвенности. Дело в том, что method group привести к типу делегата с подходящей сигнатурой, что соответсвует созданию делегата к методу в этой группе, выбранному overload resolution.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.