c#とC++の違いまとめ
3186 ワード
C#は3大主流OOP(オブジェクト向けプログラミング)言語(C++,Java,C#)の一つであり、最新のものでもある.その中で必ず前の2つの長所を参考にしなければならない.特にC++をマスターしているプログラマーにとって、JavaとC#を学ぶのは難しくありません.唯一時間がかかるのは、この2つのクラスライブラリを熟知することです.
3つの中で、C++は私が最も熟知して最も好きなので、C#を学ぶ时どうしてもそれをC++と対比して、今C#とC++の区别を1回の小さい结び目にします.「C#Primer中国語版」の前の2章を約3時間かけて読んだ心得で、間違いや偏差が少なくないので、しばらく覚えておいて、後で訂正します.
1、C#はJavaと類似しており、コンパイル後に得られるのはマシンコードではなく、仮想マシンで実行されるメタ命令である.ポインタがなく、メモリを直接操作することができず、メモリ管理を自動的に実現することはできません.C++のポインタは強力な柔軟性と効率をもたらすと同時に、多くの使用上の難題をもたらし、C++プログラムのほとんどの問題はポインタの不正確な使用に由来し、C#はソフトウェアの安全性の考慮と言語の使いやすさの考慮からポインタがない.
C#では自動ゴミ回収を実現し、newでスタックにオブジェクトを作成し、そのオブジェクトへの参照カウントが0の場合にメモリを回収します.クラスには構造関数があり、十分な関数はありません.
C#ポインタという概念はなく、参照と数値の区別しかありません.intなどの内部データ型とstruct定義のタイプはデータ型であり、コピー時に深さコピーを行う.stringとclassで定義されたタイプはリファレンスタイプで、コピー時に浅いコピーを行います.深度コピーに対応し、リファレンスカウントによってオブジェクトとメモリ管理を実現します.
C++ではポインタで簡単に実現できる機能で、C#は多くの追加のメカニズムを導入する必要があります.例えばC++の関数ポインタをC#でdelegateと呼ぶ.C#のパラメータ伝達は、伝達値と伝達値の2種類に分けられ、伝達時にrefまたはout(伝達変更)キーワードを追加する必要があります.
C#のconstはC++とは異なり、コンパイル期間定数を指し、実行期間の定数はreadonlyで指定します.
2、C#のOO特性はもっと徹底的で、すべて対象で、独立した関数は存在しない.プログラムの入口Mai()関数はあるオブジェクトのpublic staticメンバー関数である.
すべてのオブジェクトは、内部データ型int、float、stringなどを含むObjectから派生するものであり、Systemにすぎない.int 32などの別名です.C#にはテンプレートがなく、パラメータをObjectタイプに設定することで同様の機能を実現し、downcastはC++のdynamic_に類似している.castオペレータ.
C#にはヘッダファイルがなく、変数、関数、クラスには定義と説明の違いがなく、一緒にいます.コード分離は抽象クラスを設計することによってのみ実現できる.C++はこの方面ではまだ完璧ではありませんが、C#よりずっと強いです.
C#には属性(Properties)とインデックス(Index)があります.属性はC++のGetValue()とSetValue()メンバー関数に似ていますが、使用には違いがあります.インデックスは、C++のリロードオペレータ[]に似ています.
クラスのメンバー変数宣言でC#を初期化できますが、C++ではできません.どちらもコンストラクション関数でメンバー変数を初期化できます.C#の静的メンバー変数は静的コンストラクション関数で初期化できますが、静的コンストラクション関数はクラスの最初の使用時に呼び出され、C++ではコンパイルユニットのロード時に静的メンバー変数が初期化されます.
3、C#の文法にforeach(typevinlist)statementが多くなった.C++では、C++標準ライブラリの関数で類似の機能を実現する必要があります.
C++はCに対してOOPを実現するのに便利な多くの特性を導入し,ソフトウェアエンジニアリングの面で考慮された特性もある.多くのC++プログラマー(私を含む)はその博大な精神を深く感じています.同時に、C言語の紹介と優美さを受け継ぎ、オペレータのリロード、テンプレートなど、できるだけ統一されたスタイルでできるだけ多くの特性を実現します.C#はC++に比べて複雑で、肥大化して乱れているように見えます.
添付:
3つの中で、C++は私が最も熟知して最も好きなので、C#を学ぶ时どうしてもそれをC++と対比して、今C#とC++の区别を1回の小さい结び目にします.「C#Primer中国語版」の前の2章を約3時間かけて読んだ心得で、間違いや偏差が少なくないので、しばらく覚えておいて、後で訂正します.
1、C#はJavaと類似しており、コンパイル後に得られるのはマシンコードではなく、仮想マシンで実行されるメタ命令である.ポインタがなく、メモリを直接操作することができず、メモリ管理を自動的に実現することはできません.C++のポインタは強力な柔軟性と効率をもたらすと同時に、多くの使用上の難題をもたらし、C++プログラムのほとんどの問題はポインタの不正確な使用に由来し、C#はソフトウェアの安全性の考慮と言語の使いやすさの考慮からポインタがない.
C#では自動ゴミ回収を実現し、newでスタックにオブジェクトを作成し、そのオブジェクトへの参照カウントが0の場合にメモリを回収します.クラスには構造関数があり、十分な関数はありません.
C#ポインタという概念はなく、参照と数値の区別しかありません.intなどの内部データ型とstruct定義のタイプはデータ型であり、コピー時に深さコピーを行う.stringとclassで定義されたタイプはリファレンスタイプで、コピー時に浅いコピーを行います.深度コピーに対応し、リファレンスカウントによってオブジェクトとメモリ管理を実現します.
C++ではポインタで簡単に実現できる機能で、C#は多くの追加のメカニズムを導入する必要があります.例えばC++の関数ポインタをC#でdelegateと呼ぶ.C#のパラメータ伝達は、伝達値と伝達値の2種類に分けられ、伝達時にrefまたはout(伝達変更)キーワードを追加する必要があります.
C#のconstはC++とは異なり、コンパイル期間定数を指し、実行期間の定数はreadonlyで指定します.
2、C#のOO特性はもっと徹底的で、すべて対象で、独立した関数は存在しない.プログラムの入口Mai()関数はあるオブジェクトのpublic staticメンバー関数である.
すべてのオブジェクトは、内部データ型int、float、stringなどを含むObjectから派生するものであり、Systemにすぎない.int 32などの別名です.C#にはテンプレートがなく、パラメータをObjectタイプに設定することで同様の機能を実現し、downcastはC++のdynamic_に類似している.castオペレータ.
C#にはヘッダファイルがなく、変数、関数、クラスには定義と説明の違いがなく、一緒にいます.コード分離は抽象クラスを設計することによってのみ実現できる.C++はこの方面ではまだ完璧ではありませんが、C#よりずっと強いです.
C#には属性(Properties)とインデックス(Index)があります.属性はC++のGetValue()とSetValue()メンバー関数に似ていますが、使用には違いがあります.インデックスは、C++のリロードオペレータ[]に似ています.
クラスのメンバー変数宣言でC#を初期化できますが、C++ではできません.どちらもコンストラクション関数でメンバー変数を初期化できます.C#の静的メンバー変数は静的コンストラクション関数で初期化できますが、静的コンストラクション関数はクラスの最初の使用時に呼び出され、C++ではコンパイルユニットのロード時に静的メンバー変数が初期化されます.
3、C#の文法にforeach(typevinlist)statementが多くなった.C++では、C++標準ライブラリの関数で類似の機能を実現する必要があります.
C++はCに対してOOPを実現するのに便利な多くの特性を導入し,ソフトウェアエンジニアリングの面で考慮された特性もある.多くのC++プログラマー(私を含む)はその博大な精神を深く感じています.同時に、C言語の紹介と優美さを受け継ぎ、オペレータのリロード、テンプレートなど、できるだけ統一されたスタイルでできるだけ多くの特性を実現します.C#はC++に比べて複雑で、肥大化して乱れているように見えます.
添付:
1. C# , C++ , , , , 。
2. C# , , “ ” 。
3. C# “new” ,C++ “ _ ” C# 。 , , ,JAVA 。
4. , ,.NETFramework : 、 、 ……
5. C# , , C++ 。
6. C++ switch int , C# string , !
7. C# switch..case , case , case break case 。
8. ,C++ , C# System.Exception 。
9. C++ C# , , 。
10. C++ C# , C# : 。
11. C++ ,C# JAVA , , 。
12. C# , C++ 。
13. C# , , 。
14. C# , , C++ 。
15. , float uint, 0.35 0.34, , System.Conver , 。
16. 、 、Web Services…… C++ , , , , IL , .NET Framework SDK , , 。