1. ホーム
  2. c#

[解決済み] C#とJavaのジェネリックス(重複)

2022-07-10 05:48:48

質問

GenericsのJava実装はC#実装に比べ、あまり良くないと聞いたことがあります。構文が似ているという点で、Javaの実装のどこが規格外なのか、それとも宗教的な観点なのでしょうか?

どのように解決するのですか?

ストレロクシのリンク には、その違いを説明する素晴らしい仕事があります。 しかし、簡単で汚い要約は...

構文と使用法に関して。 構文は言語間でほぼ同じです。 いくつかの癖があちこちにあります (最も顕著なのは制約です)。 しかし、基本的には、一方を読むことができれば、もう一方を読んだり使ったりできる可能性が高いです。

しかし、最大の違いは実装にあります。

Javaはジェネリックを実装するために型消去の概念を使用します。 要するに、基礎となるコンパイルされたクラスは実際にはジェネリックではありません。 それらはオブジェクトとキャストにコンパイルされます。 事実上、Java のジェネリックスはコンパイル時の成果物であり、実行時に簡単に覆すことができます。

一方、C# は、CLR のおかげで、バイト コードに至るまでジェネリクスを実装しています。 CLR は、2.0 でジェネリックスをサポートするためにいくつかの破壊的な変更を行いました。 その利点は、パフォーマンスの向上、深い型安全性の検証、およびリフレクションです。

再び、提供された リンク には、より詳細な内訳が記載されていますので、ぜひご一読ください。