NDC London で、Mads Torgersen は C# 言語の将来の計画を提案しました。これらは単なる計画であり、どのバージョンがリリースされるかは保証されないことに注意してください。 Damien Guard はこれらの推奨事項を要約し、簡単に分析しています。ここではその一部を取り上げます。
読み取り専用プロパティ
読み取り専用自動プロパティを使用すると、開発者は 1 行のコードでプロパティとその背景フィールドを宣言できます。
public int X { get; } = x;
Static type using Statement
Visual Basic と Java の両方で、名前空間にモジュール (C# の静的クラス) をインポートできます。これにより、「Math」など、よく使用される静的関数の前にある繰り返しコードが削除されます。
メインコンストラクター
クラス名の後にパラメータを追加することで、開発者は明示的にコンストラクターを作成する必要がなくなりました。これにより、コンストラクター引数をプライベート フィールドにコピーするときに、長いコードが削除されます。
public class Point(int x, int y) { private int x, y; }
プロパティ式とメソッド式
プロパティ式を使用すると、単純な読み取り専用プロパティに元々必要だった定型コードの一部を削除できます。
public double Distance => Math.Sqrt((X * X) + (Y * Y));
メソッド式も同様で、もちろんパラメータを受け取ることができます。パラメータ化されたプロパティはまだ考慮されていないことに注意してください。今後長い間、これは VB の独自の機能でしかありません。
関数パラメータ
最近のほとんどの開発者は、params キーワードを使用しない限り、配列を使用しません。したがって、params も IEnumerable インターフェイスをサポートすることを誰かが提案しました。これを行う場合、他の言語 (Visual Basic など) もサポートする必要があります。 out キーワードを使用してローカル変数を宣言できることも提案されています。たとえば、
int.TryParse("123", out int x);
Null 伝播
乱雑なデータを扱う場合、開発者はプロパティを読み取ったりメソッドを呼び出したりする前に、一連の null 判定ロジックを記述する必要があることがよくあります。 ?. 構文はこのロジックを排除するのに役立ち、前の値が空でない場合にのみ次のメソッドが呼び出されます。
var bestValue = points?.FirstOrDefault()?.X;
この例では、points が空であるか、points.FirstOrDefault() が空を返した場合、.X は無視され、空が返されます。 ?? と組み合わせて使用して、オプションのデフォルト値を指定することもできます。
var bestValue = points?.FirstOrDefault()?.X ?? -1;
Objective-C や Smalltalk などの「メッセージ パッシング」言語には、すべてそのような構文が含まれています。 null 参照例外がスローされるべき場所で暗黙的に無視されるため、これは問題があると考えられます。