2010-01-28 15 views

Respuesta

16

Las funciones anuladas son funciones que tienen la misma firma, pero se implementan en diferentes clases derivadas. En tiempo de compilación, normalmente el tipo de clase base se utiliza para hacer referencia a un objeto, aunque en tiempo de ejecución este objeto podría ser de tipo derivado, por lo que cuando se llama a un método reemplazado, la implementación a la que se llama depende del tipo de objeto haciendo la llamada (base frente a un tipo derivado) que se desconoce en el momento de la compilación.

La sobrecarga (no es realmente el polimorfismo) es simplemente funciones múltiples que tienen el mismo nombre pero firmas diferentes (piense en múltiples constructores para un objeto que toma diferentes números de argumentos). El método que se llama se conoce en tiempo de compilación, porque los argumentos se especifican en este momento.

0

Porque se sabe en tiempo de compilación a cuál de sus funciones sobrecargadas se llama, pero ese no es siempre el caso para una función anulada.

28

Well, sobrecarga decisiones (que método firmas se utilizan, sobre la base de los argumentos) son realizadas por el compilador, mientras que anulando decisiones (que método implementaciones se utilizan, en función del tipo del objetivo del método) son hechos por el CLR en tiempo de ejecución.

No solía llamar "sobrecarga" polimorfismo. En mi experiencia, la palabra generalmente se refiere a anulación. Supongo que la sobrecarga de hace que le permita tratar un objeto de un tipo como otro, aunque la sobrecarga en sí misma no necesita estar involucrada allí; solo son conversiones de tipo normal.

He aquí un ejemplo que muestra que la elección de sobrecarga se realiza en tiempo de compilación:

using System; 

class Test 
{ 
    static void Foo(object a) 
    { 
     Console.WriteLine("Object overload called"); 
    } 

    static void Foo(string a) 
    { 
     Console.WriteLine("String overload called"); 
    } 

    static void Main() 
    { 
     object x = "hello"; 
     Foo(x); 
    } 
} 

Aquí la sobrecarga Foo(object) se llama porque x es de tipo object en tiempo de compilación - es sólo en tiempo de ejecución, que se sabe para referirse a una cadena.

Compare eso con este ejemplo:

using System; 

class Base 
{ 
    public virtual void Foo() 
    { 
     Console.WriteLine("Base.Foo called"); 
    } 
} 

class Derived : Base 
{ 
    public override void Foo() 
    { 
     Console.WriteLine("Derived.Foo called"); 
    } 
} 

class Test 
{ 
    static void Main() 
    { 
     Base x = new Derived(); 
     x.Foo(); 
    } 
} 

Aquí el en tiempo de compilación tipo de x es Base, pero aún así es el reemplazo de métodos de la clase derivada que se llama, porque el en tiempo de ejecución Tipo del objeto al que se refiere x es Derived.


Es un poco más complicado de lo que, de hecho, debido al método ocultar etc - pero en casos simples que usted puede pensar que es sólo recogiendo la firma.

0

Los ejemplos clásicos de polimorfismo estático se basan en template metaprogramming o Duck Typing pero no en la sobrecarga de métodos.

El polimorfismo estático significa que la desición se realiza por compilador (estáticamente), y el polimorfismo dinámico significa que la eliminación se realiza solo en tiempo de ejecución (dinámicamente).

6

tiempo de compilación polimorfismo

Supongamos Digamos que tiene 2 métodos de la siguiente manera; ya que el método comparte el mismo nombre pero tiene diferentes parámetros; se llama método "sobrecargado". Comer (comida de hilo); Comer (comida de cordel, cuerda SpoonOrFork);

y está utilizando como este en su clase de la cena

public class Man 
{ 
public bool Eat (string food) 
{ 
    //implementation 
} 

public bool Eat (string food, string SpoonOrFork) 
{ 
    //implementation 
} 

} 
public class dinner 
{ 
    public bool Start() 
    { 
    string food = "course1"; 
    Man.Eat (food); 
    } 
} 

Ahora al compilar este programa, el compilador sabe exactamente qué versión de Coma método a llamar durante el mismo tiempo de compilación (debido a la diferencia en los parámetros) .

Es por eso que se llama como polimorfismo de tiempo de compilación.

polimorfismo tiempo Run

public class chimp 
    { 
     public virtual void walk() 
     { 
      Console.WriteLine("I am walking using 4 legs"); 
     } 

    } 

    public class neanderthals : chimp 
    { 
     public override void walk() 
     { 
      Console.WriteLine("I am walking using 2 legs"); 
     } 

    } 



    class Program 
    { 
     static void Main(string[] args) 
     { 
      chimp x = new neanderthals(); 
      x.walk(); 
      Console.ReadLine(); // this will give an output of "I am walking using 2 legs" 
     } 
    } 

En el código anterior x es de tipo chimpancé. A pesar de que el compilador cree que va a llamar al método de caminar en chimpancé; pero eso no es lo que realmente sucede. Dado que depende de CLR (tiempo de ejecución), este tipo de polimorfismo se denomina polimorfismo de "tiempo de ejecución".

7

Polimorfismo

través de la herencia, una clase puede ser utilizado como más de un tipo; se puede usar como su propio tipo, cualquier tipo de base o cualquier tipo de interfaz si implementa interfaces. Esto se llama polimorfismo.

Polimorfismo significa tener más de una forma. La sobrecarga y la anulación se utilizan para implementar el polimorfismo. El polimorfismo se clasifica en polimorfismo de tiempo de compilación o unión temprana o unión estática y polimorfismo en tiempo de ejecución o unión tardía o unión dinámica.

Anulación: los mismos nombres de método con los mismos argumentos y los mismos tipos de devolución asociados en una clase y su subclase. Anular en C# hace uso de la palabra clave "anular". Anular un método significa reemplazarlo con una nueva forma de manejar datos.

Sobrecarga: el mismo nombre de método con diferentes argumentos, puede o no ser el mismo tipo de devolución escrito en la misma clase.

tiempo de compilación polimorfismo o enlace anticipado

El polimorfismo en el que identifica compilador, que forma polimórfica se tiene que ejecutar en tiempo de compilación en sí se llama como polimorfismo en tiempo de compilación o enlace anticipado.

La ventaja de la vinculación anticipada es que la ejecución será rápida. Debido a que el compilador sabe todo sobre el método durante la compilación, la desventaja es la falta de flexibilidad.

Los ejemplos de enlace anticipado son métodos sobrecargados, operadores sobrecargados y métodos anulados que se invocan directamente mediante el uso de objetos derivados.

Runtime polimorfismo o Late Encuadernación

El polimorfismo en el que identifica compilador que forma polimórfica de ejecutar en tiempo de ejecución, pero no en tiempo de compilación se llama como polimorfismo de tiempo de ejecución o el enlace.

La ventaja de la vinculación tardía es la flexibilidad y la desventaja es que la ejecución será lenta ya que el compilador tiene que obtener la información sobre el método para ejecutar en tiempo de ejecución.

Ejemplo de enlace reciente es métodos anulados que se llaman utilizando el objeto de la clase base.

class A 
{ 
    public virtual void Leg(string Name) 
    { 

    } 
} 

class B:A 
{ 
    public override void Leg(string Name) 
    { 

    } 
} 

Ejemplo mayores de carga

class A 
{ 
    void a() 
    { 
    } 
    void a(string Name) 
    { 
    } 
} 

En otras palabras, "Muchas formas de un solo objeto se denomina polimorfismo."

Ej:

un jefe de equipo se comporta en Sub Ordenada. Un líder de equipo se comporta con sus mayores. Un líder de equipo se comporta con otros líderes de equipo.

Aquí Team Leader es un objeto, pero la actitud es diferente en diferentes situaciones.

diferencia entre el método de primer orden y método de ocultación de

primordial Método permite una subclase para proporcionar una implementación específica de un método que ya está proporcionado por clase base. La implementación en la subclase anula (reemplaza) la implementación en la clase base. Lo importante que debe recordar sobre anular es que el método que está haciendo la anulación está relacionado con el método en la clase base. Cuando se llama a un método virtual en una referencia, el tipo real del objeto al que hace referencia la referencia se usa para determinar qué método de implementación se debe usar. Cuando un método de una clase base se reemplaza en una clase derivada (subclase), se utiliza la versión definida en la clase derivada. Esto es así incluso si la aplicación de llamada no sabe que el objeto es una instancia de la clase derivada.

La ocultación de métodos no tiene una relación entre los métodos en la clase base y la clase derivada. El método en la clase derivada oculta el método en la clase base.

2

Se denomina polimorfismo de tiempo de ejecución porque el comportamiento se decide en tiempo de ejecución, no en tiempo de compilación.

Cuando llame a un método como objectVariable.Method(), método que su máquina va a llamar dependerá de que está presente en el objectVariable instancia de clase y que decidió después de asignar una instancia de la clase a la misma. Esto sucederá en tiempo de ejecución y no en tiempo de compilación. Y de ahí el nombre de "polimorfismo en tiempo de ejecución".

Usted puede leer más en: What is the difference between compile time and run-time polymorphism

-1

tiempo de compilación polimorfismo

tiempo de compilación polimorfismo también se conoce como la sobrecarga de métodos. medios sobrecarga de métodos que tienen dos o más formas con el mismo nombre pero con diferentes firmas.

tiempo de ejecución polimorfismo

polimorfismo de tiempo de ejecución también se conoce como método primordial. Método primordial significa que tiene dos o más métodos con el mismo nombre y la misma firma, pero con una implementación diferente

3

Polimorfismo

Polimorfismo significa muchas formas (capacidad de tomar más de una forma). En polimorfismo poli significa “múltiple” y morph “formas” significa por lo polimorfismo significa muchas formas.

En polimorfismo declararemos métodos con el mismo nombre y diferentes parámetros en una misma clase o métodos con el mismo nombre y los mismos parámetros en diferentes clases. El polimorfismo tiene la capacidad de proporcionar diferentes implementaciones de métodos que se implementan con el mismo nombre.

En polimorfismo tenemos 2 tipos diferentes los que son

- Compile Time Polymorphism (Called as Early Binding or Overloading or static binding) 

- Run Time Polymorphism (Called as Late Binding or Overriding or dynamic binding) 

Tiempo de Compilación polimorfismo

Compilar polimorfismo tiempo significa declararemos métodos con el mismo nombre pero diferentes firmas debido a esto vamos a realizar diferentes tareas con mismo nombre de método Este polimorfismo de tiempo de compilación también se conoce como vinculación temprana o sobrecarga de métodos.

sobrecarga de métodos o compilar el polimorfismo de tiempo significa mismos nombres de los métodos con diferentes firmas (diferentes parámetros)

Para más información Comprobar este polimorfismo enlace en C#

tiempo de ejecución polimorfismo

Duración polimorfismo también llamado como último enlace o método anulación o polimorfismo dinámico. El polimorfismo de tiempo de ejecución o anulación de método significa los mismos nombres de método con las mismas firmas. En este polimorfismo de tiempo de ejecución o anulación de método podemos anular un método en la clase base creando funciones similares en la clase derivada. Esto se puede lograr utilizando el principio de herencia y usando palabras clave "virtuales &".

Cuestiones relacionadas