2011-03-25 19 views

Respuesta

9

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?

+0

Correcto, bien visto. – Gleno

5

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.

+6

buen ejemplo. Pero, ¿y si tenemos dos sobrecargas de métodos: genéricos y no genéricos? No veo una gran diferencia aquí – SiberianGuy

+2

La misma que se llamaría si fueran métodos, la no genérica. – Jon

+2

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. –

Cuestiones relacionadas