Estaba pasando por una presentación sobre C# 4.0 y al final el presentador publicó una prueba con el siguiente código.C# Parámetros con nombre, Herencia y sobrecarga sorpresa
using System;
class Base {
public virtual void Foo(int x = 4, int y = 5) {
Console.WriteLine("B x:{0}, y:{1}", x, y);
}
}
class Derived : Base {
public override void Foo(int y = 4, int x = 5) {
Console.WriteLine("D x:{0}, y:{1}", x, y);
}
}
class Program {
static void Main(string[] args) {
Base b = new Derived();
b.Foo(y:1,x:0);
}
}
// The output is
// D x:1, y:0
yo no podía entender por qué se produce esa salida (problema de la lectura de la presentación fuera de línea sin el presentador). Esperaba
D x:0, y:1
Realicé búsquedas en la red para encontrar la respuesta, pero seguí sin poder encontrarla. ¿Puede alguien explicar esto?
Esto no tiene nada que ver con los parámetros nombrados. Aprende qué es el polimorfismo. –
El problema es que cualquier desarrollador esperaría que se llamara Derived.Foo debido a un polimorfismo. Por lo tanto, es normal que alguien piense que se tomarán los parámetros nombrados en el Derived.Foo. Pero como se trata de un compilador de polimorfismo en tiempo de ejecución, utiliza los nombres de los parámetros de Base.Foo. – ferosekhanj