Что такое группа методов в 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сам по себе является "группой методов".обычно он может преобразовать группу методов в делегат (типизированный) с помощью разрешения перегрузки, но не в строку и т. д.; Это не имеет смысла.
как только вы добавляете круглые скобки, снова; разрешение перегрузки пинает В и вы однозначно определили вызов метода.
кроме того, если вы используете 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