¿Por qué se elige un método genérico cuando existe uno no genérico?
El siguiente programa produce esta salida:
Foo<T> called
Process is terminated due to StackOverflowException.
Entonces,Foo(baz)
llama al genéricoFoo<T>
, peroBar(baz)
recurre y haceno llamadaBar<T>
.
Estoy en C # 5.0 y Microsoft .NET. El compilador parece elegir el método genérico, en lugar de la recursividad, cuando el método no genérico es unoverride
.
¿Dónde puedo encontrar una explicación para esta regla? (Supuse que el compilador elegiría la recursividad en ambos casos).
Aquí está el programa en su totalidad:
using System;
namespace ConsoleApplication1 {
class Baz { }
abstract class Parent {
public abstract void Foo(Baz baz);
}
class Child : Parent {
void Bar<T>(T baz) {
Console.WriteLine("Bar<T> called");
}
public void Bar(Baz baz) {
Bar(baz);
}
void Foo<T>(T baz) {
Console.WriteLine("Foo<T> called");
}
public override void Foo(Baz baz) {
Foo(baz);
}
}
class Program {
static void Main(string[] args) {
var child = new Child();
child.Foo(null);
child.Bar(null);
Console.ReadLine();
}
}
}