C#中的泛型与Java的比较问题
在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
地图
我正在使用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() { }
}