C Sharp
IndexとRangeを指定できる専用構文が追加された。
タプルのための軽量な構文が導入された。従来のSystem.Tupleクラスとは別に、System.ValueTuple構造体が新しく追加された。
タプル記法
2個以上の要素を持つタプルのための記法が導入された。 引数リストと同様の形式で、タプルを記述できる。
分解
多値戻り値を簡単に扱えるように、分解がサポートされた。
分解はタプルに限らない。Deconstruct()メソッドが定義されたクラスでも、分解を利用できる。
以下に、DateTime型に分解を導入する例を示す。
上記のコードでDateTime型にDeconstruct()拡張メソッドを定義し、
のように左辺で3つの変数に値を受け取ることができる。
var キーワードが導入され、型推論を利用したローカル変数の宣言ができるようになった。
オブジェクトの初期化が式として簡潔に記述できるようになった。
また、コレクションの初期化も同様に簡潔に記述できるようになった。
但し、上のコードでは匿名の変数に便宜的に __p、__l、__d と命名している。実際はプログラマはこの変数にアクセスすることはできない。
グローバル変数やグローバルメソッドは存在しない。すべてのフィールドとメソッドはクラスあるいは構造体の一部として宣言されなければならない。
例えばC/C++のprintf()関数のように名前空間レベルに存在するフリー関数を定義することはできない。ほとんどの場合クラスおよび構造体は名前の衝突を避けるために名前空間に所属する。
名前空間は階層構造をもつ。つまり、名前空間は他の名前空間の中に宣言することができる。
組み込みの値型を含めたすべての型は、objectクラス (System.Object) の派生型である。つまりobjectクラスのもつすべてのプロパティやメソッドを継承する。例えば、すべての型はToString()メソッドをもつ。
クラス (class) は参照型であり、構造体 (struct) および列挙型 (enum) は値型である。構造体はクラスよりも軽量で、C/C++との相互運用性に優れるが、派生型を定義することができない。
クラスおよび構造体は複数のインタフェースを実装することができるが、多重継承はサポートされない。
C#はC++に比べて型安全である。既定の暗黙変換は、整数の範囲を広げる変換や、派生クラスから基底クラスへの変換といった、安全な変換のみに限定される。