未使用泛型參數的泛型類我想要做以下幾點:在構造
public class My<T>
{
public My(G<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
我得到「無法解析符號S」。 是否有可能以某種方式做到這一點?如果不是,爲什麼? 我不能改變G,這不是我的課。
未使用泛型參數的泛型類我想要做以下幾點:在構造
public class My<T>
{
public My(G<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
我得到「無法解析符號S」。 是否有可能以某種方式做到這一點?如果不是,爲什麼? 我不能改變G,這不是我的課。
不同於構件的功能,構造函數不能在指定的通用類型的他們的聲明。要解決此,您需要解除泛型類型從構造和入類聲明:
public class My<T,S>
{
public My(G<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
如果你打算有采取額外的泛型類型不同的構造函數,這可能是一個問題。
只是聲明小號明確在你的方法:
public class My<T, S>
{
public My(G<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
這將編譯(除非你有G類別S上一些條件)。在使用我的課程時,您將不得不在任何情況下聲明S是什麼。
例子ģ< S> =可空< S>:
public class My<T, S> where S : struct
{
public My(Nullable<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
利用該實現方式中,必須定義S使用的我的類(在這種情況下,S爲INT)時:
var myVar = new My<string, int>(4, string.Empty);
您需要:
<S>
或的需要(即。用非一般類型,接口等)取代它,或作爲一種通用的參數添加S
到該類型:
public class My<T, S>
{
public My(G<S> g, T t)
{
// code that DOES NOT use S in any way
}
}
謝謝。 我不需要S.但是G型不是協變型的,所以我不能接受像G
編譯器需要知道'S'是什麼。如果'S'是與參考類型相比的值類型,則代碼將會不同,甚至對於不同的值類型也是不同的。 –
用戶實現如下:
public class My<T, S>
{
public My(G<S> g, T t)
{
// Now S will be accessible.
}
}
似乎並不與構造工作。 我錯過了什麼嗎? – lonelyass
是的,我修好了 – AlexH