1
有沒有辦法讓一個C#泛型方法接受一個具有默認參數的類型的新約束?我試圖用下面的TestGenerics<PublicDefaultParameter>()
來做到這一點,它給了一個CS0310「必須有一個公共無參數構造函數」的錯誤。C#泛型奇怪的內部和默認參數行爲
有沒有辦法讓內部C#泛型方法調用內部構造函數?我試圖用下面的TestGenerics<InternalParameterless>()
來做到這一點,並得到了同樣的錯誤。
作爲一名經驗豐富的C#程序員,在其他語言方面有豐富的經驗,這些限制對我來說似乎完全是任意的 - 有沒有辦法理解這一點?
public class PublicParameterless
{
public PublicParameterless() {}
}
public class PublicDefaultParameter
{
public PublicDefaultParameter(int i=0) {}
}
public class InternalParameterless
{
internal InternalParameterless() {}
}
public class Test
{
public static T TestGenerics<T>() where T : new()
{
return new T();
}
public static InternalParameterless TestNonGenericCaller()
{
return new InternalParameterless();
}
public static void Main()
{
TestGenerics<PublicParameterless>();
//TestGenerics<PublicDefaultParameter>(); // error CS0310: The type `PublicDefaultParameter' must have a public parameterless constructor...
//TestGenerics<InternalParameterless>(); // error CS0310: The type `InternalParameterless' must have a public parameterless constructor..
TestNonGenericCaller();
}
}
不;你不能這樣做。 – SLaks 2014-12-19 01:22:19
@SLaks:謝謝。有沒有一個簡單的心理模型來理解這一點?這似乎完全是任意的。我的大部分經驗都是用C++和Python編寫的,每次我嘗試用C#編程時,都覺得這是一種半英語的語言,但我希望我只是在C#中應該有一個壞的心理模型。 – JDiMatteo 2014-12-19 01:24:31
@弗拉德,謝謝,請移動評論回答,我會接受它。 – JDiMatteo 2014-12-19 01:31:37