假设我有一个通用类,如下所示:
public class GeneralPropertyMap<T>
{
}
在其他一些类中,我有一个接受
GeneralPropertyMap<T>
数组的方法。在Java中,为了接收包含任何类型的GeneralPropertyMap
的数组,该方法应如下所示:private void TakeGeneralPropertyMap(GeneralPropertyMap<?>[] maps)
{
}
我们使用通配符,以便稍后我们可以调用
TakeGeneralPropertyMap
并传递一堆GeneralPropertyMap
,每种类型的T
都一样,如下所示:GeneralPropertyMap<?>[] maps = new GeneralPropertyMap<?>[3];
maps[0] = new GeneralPropertyMap<String>();
maps[1] = new GeneralPropertyMap<Integer>();
maps[2] = new GeneralPropertyMap<Double>();
//And finally pass the array in.
TakeGeneralPropertyMap(maps);
我试图找出C#中的等效项,但没有成功。有任何想法吗?
最佳答案
C#中的泛型比Java中的泛型提供了更强的保证。因此,要在C#中执行所需的操作,必须让GeneralPropertyMap<T>
类继承自该类(或接口(interface))的非泛型版本。
public class GeneralPropertyMap<T> : GeneralPropertyMap
{
}
public class GeneralPropertyMap
{
// Only you can implement it:
internal GeneralPropertyMap() { }
}
现在您可以执行以下操作:
private void TakeGeneralPropertyMap(GeneralPropertyMap[] maps)
{
}
和:
GeneralPropertyMap[] maps = new GeneralPropertyMap[3];
maps[0] = new GeneralPropertyMap<String>();
maps[1] = new GeneralPropertyMap<Integer>();
maps[2] = new GeneralPropertyMap<Double>();
TakeGeneralPropertyMap(maps);