¿Por qué C# inferir parámetros genéricos para los métodos, pero no para el constructor?C# constructor parámetros genéricos de inferencia
new Tuple<int, int>(5, 5)
vs Tuple.Create(5, 5)
¿Por qué C# inferir parámetros genéricos para los métodos, pero no para el constructor?C# constructor parámetros genéricos de inferencia
new Tuple<int, int>(5, 5)
vs Tuple.Create(5, 5)
Las otras respuestas son incorrectas. No hay una razón técnica para esto. El tipo podría inferirse a partir de la llamada del constructor, como puede hacerlo a partir de llamadas al método "normal".
Por favor refiérase a la respuesta de Eric Lippert (ex compilador de C# desarrollador): Why can't the C# constructor infer type?
considerar lo siguiente:
public class Foo<T>
{
public Foo(T value) { }
}
public class Foo
{
public Foo(int value) { }
}
// suppose type parameter inference in constructor calls
var x = new Foo(5); // which one?
Porque se puede declarar dos tipos con el mismo nombre, uno genérico, y uno no genérico, tiene que decidir de forma inequívoca entre ellos en la llamada de constructor Obligar a que los parámetros de tipo sean explícitos es una forma de eliminar cualquier posible ambigüedad. El lenguaje puede tener algunas reglas de resolución para esto, pero los beneficios de esta característica son suficientes para gastar el presupuesto para implementarlo.
buen ejemplo. Pero, ¿y si tenemos dos sobrecargas de métodos: genéricos y no genéricos? No veo una gran diferencia aquí – SiberianGuy
La misma que se llamaría si fueran métodos, la no genérica. – Jon
Jon es correcto. Desde este punto de vista, una llamada de constructor no es más que cualquier otra llamada a método y se pueden aplicar las mismas reglas de inflexión. –
Correcto, bien visto. – Gleno