¿Podría alguien explicar qué métodos anónimos hay en C# (en términos simplistas) y proporcionar ejemplos posibles?¿Qué son los métodos anónimos en C#?
Respuesta
Se introdujeron métodos anónimos en C# 2 como una forma de crear instancias delegadas sin tener que escribir un método diferente. Pueden capturar variables locales dentro del método adjunto, convirtiéndolas en una forma de cierre.
un método anónimo se ve algo como:
delegate (int x) { return x * 2; }
y se debe convertir a un tipo de delegado específica, por ejemplo, a través de la asignación:
Func<int, int> foo = delegate (int x) { return x * 2; };
... o suscribirse un controlador de eventos:
button.Click += delegate (object sender, EventArgs e) {
// React here
};
Para obtener más información, consulte:
- Mi artículo (escrito hace mucho tiempo) en delegate changes in C# 2
- MSDN on anonymous methods
- Capítulo 5 de C# in Depth si te gusta comprar mi libro :)
cuenta que las expresiones Lamdba en C# 3 tienen casi métodos anónimos sustituido completamente (aunque siguen siendo totalmente válida, por supuesto). Los métodos anónimos y las expresiones lambda se describen colectivamente como funciones anónimas.
También vale la pena agregar que los métodos anónimos existen en el ámbito local, lo que significa que no se pueden compartir en ningún otro lugar del programa ni exponerlo. Si necesita reutilizar el código, necesita escribir un método de dedicación al que se pueda llamar. – Damian
@Damian: No creo que valga la pena llamarlo así. No puedo recordar que alguna vez aparezca como algo que alguien * ha * querido hacer (a diferencia de * tipos * anónimos). Creo que es obvio solo por la sintaxis. –
Un método anónimo es un bloque de código que se usa donde normalmente se requiere un método y que no tiene nombre (por lo tanto, anónimo).
MSDN tiene examples of using anonymous methods.
así que lo haría no es necesario crear una clase, entonces? ¿Y asumo que se puede llamar al método desde cualquier otro método? – James
@Juegos - No, no necesita crear una clase para mantener el método anónimo. Se puede llamar al método desde cualquier lugar al que se le pase; no puede llamarlo más adelante sin hacer referencia a él, es anónimo. –
Gracias, ¿puedes especificar un caso en el que se requiera un método anónimo? – James
método anónimo es el método que simplemente no tiene nombre y este método se declara en su lugar, por ejemplo:
Button myButton = new Button();
myButton .Click +=
delegate
{
MessageBox.Show("Hello from anonymous method!");
};
¿Esto es implícitamente una acción? Si asignara esto a una variable y luego agregara la variable a 'myButton.Click', tendría que usar EventHandler para el tipo de variable aunque no use los parámetros. –
Estos son métodos sin nombre.
Por ejemplo, el método ordinario es:
public void Foo()
{
Console.WriteLine("hello");
}
Mientras método anónimo puede ser:
myList.ForEach(item => Console.WriteLine("Current item: " + item));
El código dentro del ForEach
es en realidad un método, pero no tiene nombre y no se puede llamar desde el exterior
No es un método anónimo, es una expresión lamdba. Las expresiones de Lambda y los métodos anónimos se denominan colectivamente funciones anónimas. –
Gracias @Jon Solo quería seguir con las palabras simples según la solicitud de OP "en términos simplistas". Saludos por 300K! ;) –
- 1. C# 2.0 Threading de interrogación (métodos anónimos)
- 2. ¿Qué son los métodos virtuales?
- 3. Métodos y delegados anónimos
- 4. Usando MethodInfo.GetCurrentMethod() en métodos anónimos
- 5. Expresión Lambda versus métodos anónimos
- 6. ¿Por qué los métodos antlr3 C# parser son privados?
- 7. BackgroundWorker con métodos anónimos?
- 8. ¿Por qué las propiedades de los tipos anónimos en C# son de solo lectura?
- 9. ¿Qué son los métodos de extensión?
- 10. diferencia entre las expresiones lambda y métodos anónimos - C#
- 11. Generando IL para métodos anónimos
- 12. ¿Los métodos LINQ son métodos de extensión?
- 13. La confusión acerca de los métodos anónimos parámetros
- 14. ¿Qué problemas hay utilizando los métodos genéricos y anónimos en Delphi 2009?
- 15. Cómo identificar métodos anónimos en System.Reflection
- 16. ¿Alguien me puede explicar métodos anónimos?
- 17. ¿Cuál es la diferencia entre los métodos anónimos (C# 2.0) y las expresiones lambda (C# 3.0)?
- 18. métodos anónimos, el alcance y la serialización
- 19. delegados anónimos en C#
- 20. ¿Qué son los genéricos en C#?
- 21. ¿Los métodos abstractos son virtuales?
- 22. ¿Los oyentes anónimos son incompatibles con las referencias débiles?
- 23. ¿Cómo deben usarse los tipos anónimos en C#?
- 24. ¿Por qué los funtores de C++ son preferibles a los objetos con métodos con nombre?
- 25. Son variables en los métodos principales estáticos
- 26. en C# son métodos privados por defecto?
- 27. ¿Qué son los métodos de devolución de llamada?
- 28. Los métodos estáticos en C++
- 29. ¿Por qué los métodos Array.Sort() y Array.IndexOf() son estáticos?
- 30. LINQ vs Lambda vs Métodos anónimos vs Delegados
Puede encontrar aquí las respuestas útiles: http://stackoverflow.com/questions/208381/whats-the-difference-between-anonymous-methods-c-2-0-and-lambda-expressions –