这两个Java和C#语句是否相同?

时间:2012-11-21 16:16:23

标签: c# java .net interface

在C#中

class ListMap<K, E>
    : ImyMap<K, E>, IComparable<K>, IEnumerable<KeyValuePair<K, E>>
{
}
Java中的

class MyListMap<K extends Comparable<? super K>, E>
    implements MyMap<K,E>, Iterable<KeyValuePair<K, E>>
{
}

只是尝试将一些数据结构从Java转换为C#,并想知道我的C#实现是否与我的Java实现相同。

如果没有,请你纠正吗?

1 个答案:

答案 0 :(得分:6)

不,那些不平等。 K extends ...部分需要转换为约束:

class ListMap<K, E>
    : ImyMap<K, E>, IEnumerable<KeyValuePair<K, E>>
   where K : IComparable<K>
{
}

C#中不需要通配符? super K。通配符是Java支持共同/逆转的方式。在C#中,这是作为接口声明的一部分完成的:

interface IComparable<in K> { ... }

in修饰符使接口逆变,这与Java中的通配符具有相同的效果。