C/C++からC#へ


C#はC/C++と文法が似ているので、C/C++からC#に移行するのは簡単です.まず、最初のプログラムを見てみましょう.似ているかどうか見てみましょう.
一、最初のプログラム

using System;
namespace Wrox.ProCSharp.Basics
{
class MyFirstCSharpClass
{
static void Main()
{
Console.WriteLine(“This isn’t at all like C++?”);
Console.ReadLine();
return;
}
}
}

名前空間:using System;とnamespace Wrox.ProCSharp.Basicsは名前空間の東と呼ばれ、この東とC++は完全に同じで、組織と管理プログラムの1つの方法で、名前の衝突の重複を防ぐことができます.Cは名前空間という概念がないので、includeの2つのライブラリに行って、この2つのライブラリに同じ署名の関数fun()が含まれていると、fun()を呼び出すと名前が衝突し、コンパイルエラーが発生します.C++/C#でANamespace::fun()を使用すると、ANamespaceの下のfunが呼び出され、上記の問題を回避します.名前空間という東東は後の言語でほとんどインフラストラクチャを提供し、より良い組織プログラムと名前の衝突を回避する方法を提供します.名前空間を機能または階層別に組織することで、プログラムをモジュール化します.
using System;Systemという名前の空間を使うことを宣言したので、中の東を使うには「System.中の東」は必要ありません:System.Console.ReadLine();Consoleと簡単に書くことができます.ReadLine();そしてnamespace Wrox.ProCSharp.Basicsとは、現在のプログラムの名前空間がWroxであることを意味する.ProCSharp.Basics、他の場所でこの中を使うにはusing Wroxが必要です.ProCSharp.Basics、またはその中の東の場所にWroxを追加します.ProCSharp.Basics::接頭辞.通常aaを用いる.bb.ccはコロンで区切られた東で名前空間を代表し,組織プログラムを階層化しやすい.名前空間は別名をつけることができて、このようにいくつかのアルファベットを少なく叩くことができます:using Introduction=Wrox.ProCSharp.Basics;これにより、WroxとしてIntroductionを直接用いることができる.ProCSharp.Basics;と入力します.
C#はオブジェクト向けなので、すべてのコードをクラスに書く必要があります.この点はC++とは異なり,C++はプロセス化とオブジェクト向けの混合体であるためである.
1つのクラスが単独で実行するにはエントリ関数Mainが必要で、MainとC++のmainは同じで、署名方式も同じで、いくつかの書き方があります.

static void Main(),static void Main(string[] args) static int Main(),static int Main(string[] args)

コマンドラインパラメータ付き、コマンドラインパラメータなしの形式で、コマンドラインパラメータは実行時に設定できます.
戻り値がvoidなのかintなのかの問題ですが、c言語では、実はc 99に標準化されており、main関数には戻り値が必要で、gccには戻り値が間違っていません.この点はC#がなぜ標準化されていないのか分からない.

Console.WriteLine(“This isn’t at all like C++?”);
Console.ReadLine();

コンソールクラスで定義された2つの静的標準入出力関数で、コンソールに1行ずつ出力し、コンソールから1行を読み込みます.
二、変数タイプ:
値タイプと参照タイプ:
C++にも似たような概念、参照と値タイプの概念があり、C++は1つの&を参照タイプとして使用します.実はC++とC#の引用の概念は1つの東ではありませんて、いくつかの方面で彼らは似たような作用を発揮しましたが.C++の参照は別名で、1つのメモリユニットに別の名前を付けただけで、C#の中の参照は、実質的にC++のポインタの行為と同じで、++がなくなっただけで、--操作しているだけで、安全なポインタと呼ばれて、間接的に1つのオブジェクトを操作することができます.C++の参照は、そのオブジェクトを直接操作します.
C#の基本タイプとStructは値タイプですが、基本タイプにはパッケージタイプ(double対応System.Double)もあり、参照タイプです.一つのルールはnewを使って創造されたものはすべて引用タイプである.
三、制御プロセス:
C#はC/C++のフロー制御構文に完全に沿っており、また、セット内の要素を巡回するためにより使いやすいforeachを追加しました.

foreach(int temp in aIntArray){Concole.WriteLine(temp)}

四、配列タイプ:

	int[] integerArray;

これはまだC/C++とは異なり、C#ではこの文は配列を作成していません.彼はただ声明にすぎません.この配列を本当に使用するには

  int[] integerArray = new int[20];

ここの配列は参照タイプの例ですが、integerArrayは配列の参照にすぎず、配列を操作するので

int[] copy = integerArray;

すべての要素をcopyにコピーするわけではありません.C++を参照するポインタと似ているので、integerArrayとcopyは同じ20個の整数が格納されているメモリセルの開始位置を指しています.
五、入出力フォーマット:
C#は、cと同様のフォーマット出力を使用します.たとえば、次のようにします.

int i = 10;int j = 20;
C: printf(“%d plus %d equals %d”, i , j , i + j);
C#: Console.WriteLine(“{0} plus {1} equals{2}”, i, j, i + j);

つまり後ろの変数で{}に持ち込まれ,{}の数字は後ろのパラメータの位置を表す.