¿Cuál es la diferencia entre el polimorfismo en tiempo de ejecución y el polimorfismo en tiempo de compilación? Además, ¿cuál es la diferencia entre el enlace anticipado y el enlace tardío? Los ejemplos serían muy apreciados.C# Polimorfismo
Respuesta
Tiempo de Compilación polimorfismo
sobrecarga de métodos es un gran ejemplo. Puede tener dos métodos con el mismo nombre pero con diferentes firmas. El compilador elegirá la versión correcta para usar en tiempo de compilación.
tiempo de ejecución de polimorfismo
Anulación de un método virtual de una clase padre en una clase de niño es un buen ejemplo. Otra es una clase que implementa métodos desde una interfaz. Esto le permite usar el tipo más genérico en el código mientras usa la implementación especificada por el niño. Dadas las siguientes definiciones de clases:
public class Parent
{
public virtual void SayHello() { Console.WriteLine("Hello World!"); }
}
public class Child : Parent
{
public override void SayHello() { Console.WriteLine("Goodbye World!"); }
}
El siguiente código de salida "Adiós mundo!":
Parent instance = new Child();
instance.SayHello();
pronto enlace
Especificación del tipo en tiempo de compilación:
SqlConnection conn = new SqlConnection();
Late Bind ing
El tipo se determina en tiempo de ejecución:
object conn = Activator.CreateInstance("System.Data.SqlClient.SqlConnection");
¿Cómo encajan los genéricos .Net en la imagen aquí? En C++, las plantillas expresan polimorfismo en tiempo de compilación. thx –
ACTUALIZACIÓN: Por favor, vea los comentarios de Eric Lippert a esta respuesta.
En C# 2, todo el enlace es temprano, porque C# 2 es un lenguaje estático. Un lenguaje de enlace tardío sería aquel en el que el enlace del método se produce en tiempo de ejecución. (C# 4 incluye una función de vinculación tardía con la introducción de dynamic
).
No estoy seguro de lo que quiere decir con tiempo de ejecución frente a polimorfismo de tiempo de compilación.
El compilador de C# determinará en el momento de la compilación a qué método se llamará la sobrecarga. El tipo de tiempo de ejecución de una instancia determinará qué implementación de una sobrecarga de método particular se ejecutará. Todavía se considera enlace anticipado aunque se produzca en tiempo de ejecución, porque el método seleccionado está restringido a ser una implementación de una sobrecarga de método virtual específica, y no es posible que dicha llamada genere una excepción relacionada con el tipo como puede ocurrir con un lenguaje dinámico y enlace tardío.
C# 2 admite la vinculación tardía en el nivel de idioma en forma de * envío virtual *. En los lenguajes de despacho virtuales, la llamada al método está * enlazada con retraso * porque el * método * exacto llamado no se determina hasta * tiempo de ejecución *. La * firma * del método se determina en tiempo de compilación pero el * método realmente llamado * no lo es. C# 4 admite la vinculación dinámica tardía: puede determinar * todo * sobre el método (excepto su nombre) en tiempo de ejecución. –
Re: su actualización: las opiniones varían. Algunas personas consideran que el envío virtual es vinculante tarde porque el método llamado se determina en tiempo de ejecución. (Estos tienden a ser personas con un fondo en C u otro lenguaje de enlace mayoritariamente estático.) Algunas personas lo consideran vinculante porque la * ranura * que contendrá el puntero del método se determina en tiempo de compilación. (Estos tienden a ser personas que están acostumbradas a la programación COM o C++, donde casi todas las llamadas son virtuales). Personalmente trato de usar solo "enlace tardío" para decir "dinámico". –
@Eric Lippert - Bien, eso tiene sentido. Su uso de "enlace tardío" parece similar al mío entonces. Siempre he pensado en "temprano" y "tarde" para indicar, en efecto, el momento en que se detecta el error cuando algo sale mal. ¡Gracias por tus comentarios! –
Una respuesta muy simple y directa para la diferencia entre el tiempo de compilación y el polimorfismo de tiempo de ejecución.
Compile Time Polymorphism - Método de sobrecarga (que tiene el mismo nombre pero con una firma diferente).Por favor, compruebe el video en la sobrecarga de métodos en esta dirección URL http://csharp-video-tutorials.blogspot.com/2012/06/part-25-c-tutorial-method-overloading.html
tiempo de ejecución polimorfismo - el reemplazo de métodos (Invocar los métodos de clase hija anulados en tiempo de ejecución, utilizando una variable de referencia de la clase base se denomina como polimorfismo de tiempo de ejecución). Por favor, compruebe los videos sobre la anulación de método (polimorfismo) en esta URL http://csharp-video-tutorials.blogspot.com/2012/06/part-23-c-tutorial-polymorphism.html
- 1. Polimorfismo C++
- 2. Polimorfismo de plantillas C++
- 3. Polimorfismo en C
- 4. polimorfismo y C#
- 5. C# polimorfismo simple pregunta
- 6. C plantillas ++ polimorfismo obstáculo
- 7. C# polimorfismo en tipos genéricos
- 8. Aprendizaje C++: polimorfismo y rebanar
- 9. cómo C++ implementa el polimorfismo internamente?
- 10. Referencia a punteros y polimorfismo C++
- 11. C++: sobrecarga de polimorfismo de lucha
- 12. C++: La herencia múltiple con polimorfismo
- 13. C# Genéricos y polimorfismo: ¿un oxímoron?
- 14. C Unión polimorfismo dentro de matrices
- 15. C++ polimorfismo y por defecto argumento
- 16. polimorfismo, genéricos y tipos anónimos C#
- 17. ¿Hay alternativas al polimorfismo en C++?
- 18. ¿Cómo implementar el polimorfismo genérico en C#?
- 19. Polimorfismo, sobrecargas y genéricos en C#
- 20. JSON polimorfismo
- 21. Polimorfismo Hibernate
- 22. Ejemplo práctico de polimorfismo
- 23. ¿Es realmente polimorfismo lo que parece ser polimorfismo en PHP?
- 24. hilo impulso destruye polimorfismo
- 25. Polimorfismo en WCF
- 26. Polimorfismo y constructores
- 27. GWT 2.4.0 RequestFactory polimorfismo
- 28. Polimorfismo de Java
- 29. creando objetos y polimorfismo
- 30. interfaces genéricas y polimorfismo
Tiene que hacer una * pregunta *. Estos términos no tienen nada en común. –
¿Quieres ejemplos para google mejor? –
¿Debería etiquetarse como 'tarea'? – keyboardP