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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

 Func fn = 123.ToString; Console.WriteLine(fn("00000000")); 

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

 Func fn = 123.ToString; Console.WriteLine(fn()); 

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

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

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

 Int32.ToString(IFormatProvider) 

или это может означать:

 Int32.ToString() 

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

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

Interesting Posts

Модель в модальном окне в angularjs пуста

Рабочие книги VBA. Не запрашивать, если пользователь хочет сохранить?

Возврат кода статуса http из Web Api controller

Как избежать замены команды bash для удаления символа новой строки?

Беспокойство

Подход DDD для доступа к внешней информации

Загрузите сразу несколько файлов в Struts2 @Action

Что такое команда sh?

Java 8: Обязательная проверка обработки исключений в lambda-выражениях. Почему обязательный, а не факультативный?

Как я могу назвать таблицу автоматически, ссылаясь на две ячейки?

Автоматизированное тестирование веб-интерфейса

Лучший инструмент для очистки файлов для windows xp

Как распечатать трассировку стека ошибок на странице JSP?

Как реализовать схему работы с Dapper?

Есть ли какое-либо программное обеспечение или аппаратное обеспечение, которое позволяет останавливать, замедлять, ускорять или даже отменять время?

Давайте будем гением компьютера.