1

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の実装と同じかどうかを知りたいと思っていました。

そうでない場合は修正していただけますか?

4

1 に答える 1

6

いいえ、それらは等しくありません。このK extends ...部分を制約に変換する必要があります。

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

? super KC# ではワイルドカードは必要ありません。ワイルドカードは、共変/反変をサポートする Java の方法です。C# では、これはインターフェイス宣言の一部として行われます。

interface IComparable<in K> { ... }

修飾子はインターフェイスを反変にします。inこれは、Java のワイルドカードと同じ効果があります。

于 2012-11-21T16:22:20.927 に答える