web-dev-qa-db-ja.com

C#にJavaよりもはるかに多くの機能があるのはなぜですか?

これは、Java対C#の引数ではありません。C#の経験のないJavaプログラマーであり、好奇心。

C#について少し読んだところ、Javaよりもはるかに多くの機能があるようです。いくつかの例:

  • 型推論。
  • dynamicキーワード。
  • デリゲート。
  • オプションのパラメーター。
  • LambdaとLINQ (実際にはこれらが何であるかはわかりません)
  • プロパティ。

ただし、Javaには、C#にはない機能はありません。

私の質問は、C#にJavaよりもはるかに多くのネイティブ機能があるのはなぜですか?そして、なぜJavaプロパティや型推論など、年間を通じてこれらのいくつかを追加しなかったのですか?Java言語設計者はより単純なアプローチをとっていますか?これの理由は何ですか?

14
Aviv Cohn

いくつかの理由:

  1. C#はJavaよりも後に登場しました。バージョン1は、Java 1.4の露骨なぼったくりでした。そのため、その時点でほとんどすべてのJavaが持っていました。
  2. しかし、C#はJavaよりもはるかに速く開発されました。これは、エキサイティングな新しいプラットフォームであったためです(そして、ターボパスカルの父、アンダースハイルスバーグには非常に優れたドライバーがありました)。これにより、明らかになったJavaのすべての間違いを回避しながら、Javaの実践者が望んでいたすべての間違いを追加できました。
  3. 一方、Javaは、非常に厳格な下位互換性の目標と、開発のペースがやや遅いことによって妨げられました。これは、標準で、エンタープライズで、信頼でき、驚くべきことではないという評判を得ようと必死に努力したためです。天才ではないプログラマーの95%のためのソリューション。

その結果、Java=には機能のギャップが少しあります。将来の計画は膨大ですが、いつものように、この種のものではすべてが予定より少し長くかかります。

22
Kilian Foth

JavaとC#の大きな違いの1つは、C#デザイナーが言語だけでなく標準IDEも制御することです。

IDEが適切にサポートしない場合、拡張メソッドや部分クラスなどを追加することは、開発/コントロールのバージョン管理において悪夢になる可能性があります。

選択したプラットフォーム(Eclipse、Netbeans、vi + Ant)でJavaをコンパイルできることが期待されているため、コードを壊す機能を追加します(これらを使用してLINQなどの追加の拡張機能を開発します) )は、「IntelliSenseがこれらのケースを処理するので、心配する必要がない」と言うよりもはるかに複雑です。

さらに、機能の数ではなく、機能の価値に注目する価値がある場合もあります。たとえば、自動プロパティはニースであり、確かにJavaがこれをサポートすることを望みますが、結局のところ、Javaでさらに数行のコードを記述する必要があることを意味します。同様に、 "イベント"を機能と呼ぶことは、特別にラベル付けされたデリゲートに過ぎず、Javaで既に使用されているオブザーバーパターンの洗練されたコピーにすぎないため、多少誤った名称です。 Javaより明示的なコーディングが必要です)

誤解しないでください。C#で注目に値するいくつかの革新が導入されたと思います。いつかOracleのビッグボスが目覚め、真の「Java 2」を起動してこれらのいくつかを含めることを望みますが、そのギャップは質問ポイント。

4
SJuan76