2011-03-25 85 views

回答

9

其他回答是錯誤的。這沒有任何技術上的原因。類型可以從構造函數調用中推斷出來,因爲它可以從「普通」方法調用中獲得。

請參考由埃裏克利珀(前C#編譯器的開發者)的回答:Why can't the C# constructor infer type?

+0

你是對的,很好看。 – Gleno 2011-03-25 10:28:39

5

考慮以下幾點:

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? 

因爲你可以用相同的名字聲明兩個類型,一個通用的,和一個非通用的,你需要將它們之間的明確決定在構造函數調用中。強制類型參數是明確的是消除任何可能的歧義的一種方法。該語言可能有一些解決方案規則,但這項功能的好處足以將預算用於實施它。

+6

很好的例子。但是如果我們有兩個方法重載:泛型而不是泛型?我在這裏看不出有什麼大的差別 – SiberianGuy 2011-03-25 09:58:09

+2

如果他們是方法 - 非通用方法,將會被調用。 – Jon 2011-03-25 09:59:37

+2

喬恩是正確的。從這個角度來看,構造函數調用不是別的方法調用,而是可以應用相同的推理規則。 – 2011-03-25 10:24:47