viernes, 12 de junio de 2009

C# y sobrecarga de métodos genéricos… un detallito

A veces hay aspectos de C# que no pensamos hasta que nos encontramos con ellos… A mi me pasó con un código parecido a este:

class Program
{
static void Main(string[] args)
{
Baz baz = new BazDerived();
new Foo().Bar(baz);
Console.ReadLine();
}
}
class Foo
{
public void Bar<T>(T t)
{
Console.WriteLine("Bar<T> typeof(T) = " + typeof(T).Name);
}
public void Bar(object o)
{
Console.WriteLine("Bar o.GetType() = " + o.GetType().Name);
}
}
class Baz { }
class BazDerived : Baz { }

La pregunta seria: ¿cual es la salida por pantalla de este programa?


Pues… esta es la respuesta (para los que querais pensar un poco la he puesto en negro sobre negro… seleccionad el texto para verlo):



Bar<T> typeof(T) = Baz


La verdad es que tiene toda su lógica… lo que personalmente no me gusta nada es que este código compile sin generar ningún warning. ¿Que opinais vosotros?


Saludos!!!


pd: Otro crosspost de mi blog en geeks.ms… para variar ;-)

No hay comentarios: