C++ と C# の違いを教えてください。 それと 「.NET」 って何ですか? 上記2つとの関係は?

C++ と C# の違いを教えてください。 それと 「.NET」 って何ですか? 上記2つとの関係は?

C言語関連161,167閲覧

ベストアンサー

46

先に.NETについて。 .NETはMicrosoftの次世代インタネット戦略のことです。ちなみに.NETに対応したプログラムの開発・実行環境が.NET Frameworkです。 C#は元々.NETの普及推進の為に新たに作られた言語で、代表的な処理系はMicrosoft Visual C#です。 C++自体は.NETとは無関係ですが、C++を使って.NET対応のプログラムを開発する為の処理系としてMicrosoft Visual C++ .NETがあります。 以下、C++とC#の比較です。双方の特徴を、対比できるように同じ順番で箇条書きにしてあります。 C++ ・手続き型プログラミング、オブジェクト指向プログラミング、ジェネリックプログラミングなどが可能なマルチパラダイムな言語。 ・元々C言語を拡張したものなので、構文は基本的にC言語と同じ。 ・C言語(C89)との下位互換性がある程度あるので、C言語で書かれた資産を流用できる。 ・コンパイル型言語。実行速度に気を使った工夫がされていることもあり、結構高速に動作するプログラムを生成できる。 ・マルチパラダイムな為か、言語仕様がかなり大きく複雑。C言語由来の危険さ(メモリアクセス周り)を抱えている。また特定のパラダイムで捉えた場合、色々と問題点が指摘できる(オブジェクト指向言語としては、ガベージコレクタが無いので資源管理(例えばnewとdelete)が難しい。ジェネリックとしては、C++のテンプレートの実装はイマイチ)。使いこなせればとても強力な言語だが、全てを使いこなせる人はなかなかいないのが現状。 ・かなりメジャー。最近では組み込み開発でも使われることがある。 C# ・オブジェクト指向プログラミング言語。限定的にポインタやビット演算などの低レベル処理が可能だったりジェネリックに対応してたりするが、基本はオブジェクト指向。 ・Microsoftが.NET用に新しく作った言語で、C++とJavaが混ざったような構文(どちらかというとJava寄り)。 ・C言語やC++との互換性は無い。 ・.NET Frameworkでは、コンパイルしてCIL(共通中間言語)のコードを生成しておき、プログラム実行時にCILのコードをJITコンパイラに噛ませている。Javaと良く似た仕組みで、コンパイル型とインタプリタ型の中間と言える方法。  最近のJava同様、高速化の為の工夫がされているので、プログラムの実行速度はそれほど遅くはないはず。  ちなみに.NET FrameworkはCILのコードの実行環境(Java VMみたいなもの)を兼ねているので、.NET Framework又はその互換環境(Monoなど)がないとプログラムが動かない。でも実行環境さえあればどこででも動く。  但し、C#の言語仕様にはコンパイラが生成するコードについての規定はないので、CILじゃなくてネイティブコードを生成するコンパイラを作っても問題ない。 ・C++ほど複雑ではなく、学びやすい。またエラーを発生させにくいように色々と工夫されている。 ・いまいちマイナー感を払拭できない。それなりに良くできた言語だと思うんだけどなぁ。 .NET FrameworkはCILのコードを実行します。その為.NET対応の処理系では、プログラムをコンパイルするとCILのコードが生成されます。 なので、同じC++の処理系でも、Visual C++ .NETではネイティブコードではなくCILのコードを吐きます(正しくは、どちらも生成可能)。 ちなみにC++もC#も標準化された規格が存在します。 特にC#については誤解されていますが、Visual Basicとは違ってECMAやISOによる標準規格が存在します。その意味では「Windowsで動くプログラムしか作れない」とか「.NET Frameworkないしその互換環境がないと動かない」というわけではありません。もっとも、実際にネイティブコードを生成するC#のコンパイラがあるかどうかは、調べてみないと分かりませんが。

46人がナイス!しています

その他の回答(1件)

4

C++ は C言語をベースにオブジェクト指向を取り入れた「コンパイラ言語」です。 C#は SunのJavaに対抗する為に作った MSのJavaライクな「インタープリタ言語」です。 「.NETフレームワーク」はC#を動かす為のVM環境ですが、VC++やVB等からも利用可能です。 もちろん、.NETフレームワークを使った部位はVM環境下で実行されますので処理は重くなります。 言語仕様的には、C++では多重継承が出来るが、C#では単一継承しか出来ないなどの違いが有ります。 また、C#では他にもカプセル化させる為の様々な制約的仕様が盛り込まれています。 尚、「.NET」はMSのプロジェクト名であり、MS戦略の総称です。

4人がナイス!しています