C# 7.3から12までの主要な変更点

技術的備忘録

C# 8.0

  1. Nullable参照型

    • 参照型の変数がnullを許容するかどうかを明示的に指定できるようになりました。
    string? nullableString = null;
    string nonNullableString = "Hello";
    
  2. 非同期ストリーム

    • IAsyncEnumerable<T>インターフェースとawait foreach文が導入されました。
    await foreach (var item in GetAsyncStream())
    {
        Console.WriteLine(item);
    }
    
  3. Switch式

    • より簡潔なswitch文の記述が可能になりました。
    string GetDayType(DayOfWeek day) => day switch
    {
        DayOfWeek.Saturday or DayOfWeek.Sunday => "Weekend",
        _ => "Weekday"
    };
    
  4. インターフェースのデフォルト実装

    • インターフェース内でメソッドの実装を提供できるようになりました。
  5. using宣言

    • ブロックを使わずにリソースの解放を保証できるようになりました。
    using var file = new StreamReader("file.txt");
    

C# 9.0

  1. レコード型

    • 値のセマンティクスを持つ参照型を簡潔に定義できるようになりました。
    public record Person(string FirstName, string LastName);
    
  2. init-only setters

    • オブジェクト初期化時のみ値を設定できるプロパティを定義できるようになりました。
    public string Name { get; init; }
    
  3. Top-level statements

    • Main メソッドを省略し、直接コードを書けるようになりました。
  4. パターンマッチングの強化

    • 型パターン、関係パターン、論理パターンなどが追加されました。
  5. ターゲット型new式

    • 型推論が可能な場合、newの後の型を省略できるようになりました。
    List<string> names = new();
    

C# 10.0

  1. 全体的に暗黙の型指定

    • ローカル関数やラムダ式の戻り値の型を省略できるようになりました。
  2. レコード構造体

    • 値型のレコードを定義できるようになりました。
    public record struct Point(int X, int Y);
    
  3. ラムダ式の改善

    • 属性やreturn文を使用できるようになりました。
  4. 文字列補間の改善

    • 定数式での文字列補間が可能になりました。

C# 11.0

  1. raw文字列リテラル

    • 複数行の文字列を簡単に定義できるようになりました。
    string json = """
    {
      "name": "John Doe",
      "age": 30
    }
    """;
    
  2. 必須メンバー

    • オブジェクト初期化時に必ず設定しなければならないプロパティを定義できるようになりました。
    public class Person
    {
        public required string Name { get; set; }
    }
    
  3. 静的抽象メンバー

    • インターフェースで静的抽象メンバーを定義できるようになりました。
  4. ジェネリック属性

    • 属性にジェネリック型パラメータを使用できるようになりました。

C# 12.0

  1. プライマリコンストラクタ

    • クラスやストラクトでプライマリコンストラクタを使用できるようになりました。
    public class Person(string name, int age)
    {
        public string Name { get; } = name;
        public int Age { get; } = age;
    }
    
  2. コレクション式

    • 配列やリストなどのコレクションを簡潔に初期化できるようになりました。
    int[] numbers = [1, 2, 3, 4, 5];
    List<string> names = ["Alice", "Bob", "Charlie"];
    
  3. インラインの配列

    • メソッドの引数として直接配列を定義できるようになりました。
    void PrintNumbers(params int[] numbers) { /* ... */ }
    PrintNumbers([1, 2, 3]);
    
  4. ref readonly パラメーター

    • 参照渡しで、かつ読み取り専用のパラメーターを定義できるようになりました。
  5. エイリアス型

    • 既存の型に別名を付けることができるようになりました。
    using Point = (int X, int Y);
    

これらの新機能により、C#はより表現力豊かで、効率的なコーディングが可能になりました。

Claude3.5 Sonnet で作成しました

先日、Claude3.5 Sonnet がリリースされました。
早速、これを使用して、簡単なレポートを作成してもらいました。
これは、その最初のサンプルです。

.NET Framework 4.8 のC#のバージョンは、C#7.3です。
最新の .NET 8 のC#のバージョンは、C#12です。
このレポートは、.NET Framework 4.8 から .NET 8 へシステムをマイグレーションするとき、役に立つ記事としてClaude3.5に書いて貰いました。


技術系の簡単な解説記事程度なら、Claude3.5に書いて貰った方が良いですね。
正直、人間が既存知識を解説することに意味があるのか、疑問に思えるようになりました。
機械にできる仕事は、機械にやらせるべきです。
似たようなサンプル記事を、いくつか公開しておきます。

ではまた。

タイトルとURLをコピーしました