1

こんにちは、C# ジェネリックは初めてです。C# で次のコードを書き直す正しい方法は何ですか?

public class A <T extends Base>{

    Map<Class<T>,Object> m = newHashMap();

}
4

4 に答える 4

4

最後に、私はあなたの意図を正しく理解したと思います。

public class A<T> where T : Base
{
    Dictionary<Type, T> m = new Dictionary<Type, T>();
}

C# では型消去がないため、コードを少し変更する必要があります。

于 2012-08-05T11:53:33.813 に答える
1

他の投稿で既に述べたように、C# に相当するものclass A<T extends Base>class A<T> where T : Base. ただし、 とは異なりjava.lang.Class、C# クラスSystem.Typeはジェネリックではないため、Class<? extends Base>C# の の概念に相当するものはありません。オプションは次のように削減されます。

public class A<T> where T : Base
{
    Dictionary<Type, object> m = new Dictionary<Type, object>();
}

今、あなたは持っているかもしれません:

public class Sub1 : Base {}
public class Sub2 : Base {}

....

m.Add(typeof(Sub1), new object());
m.Add(typeof(Sub2), new object());

しかし、残念ながら次のこともできます。

m.Add(typeof(string), new object());

あなたの最善の選択はm、これが起こらないように適切にカプセル化されていることを確認することです.

于 2012-08-05T13:06:01.327 に答える
0

ここで説明されているように、制約を使用してこれを実現します: http://msdn.microsoft.com/en-us/library/d5x73970

public class A<T>
  where T : Base
{
}
于 2012-08-05T11:53:12.207 に答える
0

次のように型制約を使用します。

public class A<T> where T : Base {

}
于 2012-08-05T11:53:51.867 に答える