Что такое группа методов в 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.
5 ответов
группа методов-это имя для набор методов (это может быть только один) - т. е. теоретически ToString
метод может иметь несколько перегрузок (плюс любые методы расширения): ToString()
, ToString(string format)
, etc-следовательно ToString
сам по себе является "группой методов".
обычно он может преобразовать группу методов в (типизированный) делегат с помощью разрешения перегрузки , но не в строку и т. д.; Это не имеет смысла.
как только вы добавляете круглые скобки, снова; разрешение перегрузки in и вы однозначно идентифицировали вызов метода.
кроме того, если вы используете 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
функция имеет много перегрузок-группа методов будет группой, состоящей из всех различных перегрузок для этой функции.