Что такое группа методов в C#?



Я часто сталкивался с ошибкой, такой как" не удается преобразовать из "группы методов" в "строку" в таких случаях, как:



var list = new List<string>();
// ... snip
list.Add(someObject.ToString);


конечно, в последней строке была опечатка, потому что я забыл скобки вызова после ToString. Правильная форма будет:



var list = new List<string>();
// ... snip
list.Add(someObject.ToString()); // <- notice the parentheses


однако мне стало интересно, что такое группа методов. Google не очень помогает ни MSDN.

634   5  

5 ответов:

группа методов-это имя для набор методов (это может быть только один) - т. е. теоретически ToString метод может иметь несколько перегрузок (плюс любые методы расширения): ToString(),ToString(string format), etc-отсюда ToString сам по себе является "группой методов".

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

как только вы добавляете круглые скобки, снова; разрешение перегрузки пинает В и вы однозначно определили вызов метода.

кроме того, если вы используете LINQ, вы можете, по-видимому, сделать что-то вроде myList.Select(methodGroup).

так, например, у меня есть:

private string DoSomethingToMyString(string input)
{
    // blah
}

вместо явного указания переменной, которая будет использоваться следующим образом:

public List<string> GetStringStuff()
{
    return something.getStringsFromSomewhere.Select(str => DoSomethingToMyString(str));
}

Я могу просто опустить имя var:

public List<string> GetStringStuff()
{
    return something.getStringsFromSomewhere.Select(DoSomethingToMyString);
}

вы можете разыграть группа методов в делегат.

подпись делегата выбирает 1 метод из группы.

этот пример выбирает ToString() перегрузка, которая принимает строковый параметр:

Func<string,string> fn = 123.ToString;
Console.WriteLine(fn("00000000"));

этот пример выбирает ToString() перегрузка, которая не принимает никаких параметров:

Func<string> fn = 123.ToString;
Console.WriteLine(fn());

первый результат в вашем поиске MSDN сказал:

группа методов определяет один метод для вызова или набор перегруженные методы, из которых выберите конкретный метод для вызова

Я понимаю, что в основном потому, что когда вы просто пишете someInteger.ToString, это может означать:

Int32.ToString(IFormatProvider) 

или это может относиться к:

Int32.ToString()

так это называется группой методов.

на ToString функция имеет много перегрузок - группа методов будет группой, состоящей из всех различных перегрузок для этой функции.

Comments

    Ничего не найдено.