C#中的泛型与Java的比较问题

C#中的泛型与Java的比较问题,c#,java,.net,generics,covariance,C#,Java,.net,Generics,Covariance,在Java中,我可以使用通配符“”指定泛型。可以创建这样的地图: 地图 我正在使用C语言,我需要一本字典>\u objs=new Dictionary否 但是,如果您使用的是C#4,则可以制作isomoInterface,以便isomoInterface可以转换为isomoInterface 如果ISomeInterface具有获取其类型参数的参数(与返回值相反)的方法,这将是完全不可能的,因为它将允许您传递任意对象作为参数 EDIT:在您的特定情况下,最好的解决方案是使IMyInterface

在Java中,我可以使用通配符“”指定泛型。可以创建这样的地图:

地图

我正在使用C语言,我需要一本
字典>\u objs=new Dictionary否

但是,如果您使用的是C#4,则可以制作
isomoInterface
,以便
isomoInterface
可以转换为
isomoInterface

如果
ISomeInterface
具有获取其类型参数的参数(与返回值相反)的方法,这将是完全不可能的,因为它将允许您传递任意对象作为参数

EDIT:在您的特定情况下,最好的解决方案是使
IMyInterface
继承一个单独的非通用
IMyInterface
接口,并将所有不涉及
t
的成员移动到基本接口。

然后,您可以使用
字典
,不会有任何问题。

可以将类型变量限制为某些类型:

public class Map<U, T> where T : IInterface
{
}
公共类映射,其中T:i接口
{
}
但是,您不能执行以下操作:

Map<string, T> map = new Map<string, T>()
Map Map=newmap()

对于您所描述的用法,您可以使用一个带有
IDictionary的变通方法:

接口接口
{
对象方法();
void方法2();
}
接口ISomeInterface:ISomeInterface
{
T方法();
}
C1类:等距接口
{
对象接口.Method(){return Method();}
公共int方法(){return 10;}
public void Method2(){}
}

我对Java不太了解,但
是否与
对象
相同?是的,
对象
。更出乎意料的是,您在那里编写的任何东西实际上都是
对象
,因为Java的VM实际上不支持泛型,所以它们在编译时都会被删除。
public class Map<U, T> where T : IInterface
{
}
Map<string, T> map = new Map<string, T>()
interface ISomeInterface
{
    object Method();
    void Method2();
}

interface ISomeInterface<T> : ISomeInterface
{
    T Method();
}

class C1 : ISomeInterface<int>
{
    object ISomeInterface.Method() { return Method(); }
    public int Method() { return 10; }
    public void Method2() { }
}