una tipos programacion metodos metodo llamar funciones ejemplos crear consola como clases clase c# .net method-group

tipos - metodos y funciones en c#



¿Qué es un grupo de métodos en C#? (5)

A menudo me he encontrado con un error como "no se puede convertir de ''grupo de métodos'' a ''cadena''" en casos como:

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

por supuesto, hubo un error tipográfico en la última línea porque olvidé los paréntesis de invocación después de ToString . La forma correcta sería:

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

Sin embargo, llegué a preguntarme qué es un grupo de métodos. Google no es de mucha ayuda ni MSDN .


Además, si está usando LINQ, aparentemente puede hacer algo como myList.Select(methodGroup) .

Entonces, por ejemplo, tengo:

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

En lugar de indicar explícitamente la variable que se usará de esta manera:

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

Solo puedo omitir el nombre de la var:

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


El primer resultado en su búsqueda de MSDN dijo:

El grupo de métodos identifica el método a invocar o el conjunto de métodos sobrecargados entre los cuales elegir un método específico para invocar.

mi entendimiento es que básicamente porque cuando solo escribes someInteger.ToString , puede referirse a:

Int32.ToString(IFormatProvider)

o puede referirse a:

Int32.ToString()

Por eso se llama un grupo de métodos.


La función ToString tiene muchas sobrecargas, el grupo de métodos sería el grupo que consiste en todas las diferentes sobrecargas para esa función.


Puede convertir un grupo de métodos en un delegado.

La firma del delegado selecciona 1 método fuera del grupo.

Este ejemplo recoge la sobrecarga ToString() que toma un parámetro de cadena:

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

Este ejemplo recoge la sobrecarga ToString() que no tiene parámetros:

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


Un grupo de métodos es el nombre de un conjunto de métodos (que puede ser solo uno); es decir, en teoría, el método ToString puede tener múltiples sobrecargas (más cualquier método de extensión): ToString() , ToString(string format) , etc. por sí mismo es un "grupo de métodos".

Por lo general, puede convertir un grupo de métodos en un delegado (escrito) usando una resolución de sobrecarga, pero no a una cadena, etc .; no tiene sentido

Una vez que agregues paréntesis, otra vez; La resolución de sobrecarga entra en acción y usted ha identificado inequívocamente una llamada de método.