C#7の新機能

C#7は、コーディングの簡素化とパフォーマンスの向上に特に重点を置いて、多くの新機能を追加します。データの消費、コードの簡素化、パフォーマンスに重点を置いており、複数の方法で余分なコードを記述しなければならないという苦痛を排除するように設計されています。

C#7の新機能と拡張機能を簡単に説明します。

  • ローカル関数のサポート
  • タプルタイプのサポートの強化
  • レコードタイプ
  • パターンマッチング
  • ヌル不可能な参照型
  • 不変型
  • アウト変数のサポートの向上

アウト変数のサポートの向上

使用時にout変数を宣言する機能は、C#7の優れた新機能です。これを示すコードスニペットの例を次に示します。

public void Save(Product p)

{

    p.SaveData(out int x);

    //Usual code

}

変数を使用するのに適した場所は、tryブロック内です。戻り値の型がtrueの場合は操作が成功したことを示し、そうでない場合はfalseの場合は、ブール値のout変数を使用してください。

パターンマッチング

C#7は、パターンマッチングの優れたサポートを提供します。カスタムデータ型でも、任意のデータ型でパターンマッチングを使用できます。さらに、パターンマッチングを利用して、式から値を抽出できます。これは、動作中のパターンマッチングを示すコードスニペットです。

object obj = "This is a demonstration of pattern matching in C# 7";

if (obj is string str)

{

    Console.WriteLine(str);

}

ローカル関数のサポート

多くの場合、1回だけ使用する必要があるヘルパー関数が必要になる場合があります。このような関数を別の関数内で宣言できるようになりました。このような関数は、ローカル関数と呼ばれます。本質的に、ローカル関数のサポートにより、ブロックスコープ内でメソッドを宣言できます。これは、以前のバージョンのC#言語で匿名メソッドを使用してFuncおよびActionタイプを使用して可能であったという事実にもかかわらず、いくつかの課題がありました。それらは、ジェネリックス、パラメーター、refおよびoutパラメーターをサポートしていませんでした。

タプルのサポートの向上

タプルは、値の一時的なグループです。POCOクラスに似ていますが、オンザフライで作成されます。タプルを使用する主な利点は、メソッドが複数の値を返すことができることです。タプルを使用して異種データのセットを表し、そのデータにアクセスする簡単な方法を提供することをお勧めします。タプルは新しいものではなく、かなり前から存在しています。F#およびPythonプログラミング言語のタプルをサポートしています。タプルを利用して、不変の順序付けられた有限シーケンス、固定サイズの同種または異種データの有限シーケンスを格納できます。

タプルリテラルとタプル分解もサポートするようになりました。C#7では、タプルは値型と見なされます。したがって、これは可変タイプであり、パフォーマンスに関する限り、はるかに効率的です。

null許容でない参照型

ヌル可能値型は、C#2.0で最初に導入されました。null許容でない参照型は、この機能の正反対です。基本的に、null不可能な参照型は、nullでないことが保証されている参照型を示すために使用されます。C#7でnull許容でない参照型を宣言する方法は次のとおりです。

string! str; //This is a non-nullable reference type

不変オブジェクトのサポートの向上

不変オブジェクトとは、一度作成すると状態を変更できないオブジェクトです。これにより、不変のオブジェクトスレッドが安全になります。ゲッターはあるがセッターがないプロパティを含むクラスを作成するとします。はい、どうやら、クラスのインスタンスは不変のようです。しかし、後の時点で、誰かが同じプロパティにセッターを追加すると、不変性が失われますね。

ここで、不変型のより良いサポートが助けになります。C#7では、別のインスタンスに基づいて新しいインスタンスを作成できます。これを実現する方法は次のとおりです。

var firstObject = new Employee(101);

var secondObject = firstObject with {EmployeeId = 102};

レコードタイプ

レコードタイプを使用すると、プロパティのみを使用してタイプを作成できます。本質的に、レコードタイプは、プロパティのみで構成されるデータタイプです。次のコードスニペットは、レコードタイプを宣言する方法を示しています。

 class Rectangle(int Height, int Breadth);