オブジェクト初期化子
オブジェクト初期化子は、C#を他の多くの高級言語と肩を並べる存在にするために当初から用意すべきだった機能です。CやC++とは異なり、C#はこれによって総合的な初期化機能を持つことになりました。この機能はおそらく、LINQをサポートするために追加された機能の中で最も広く役立つでしょう。Microsoftがオブジェクト初期化子を追加したのは、LINQステートメントが単一ステートメントだからです。これまでは、1つのステートメント内で実行できるものでなければ、オブジェクトをクエリ結果で初期化することはできませんでした。
使用時のヒント
- 1ステートメント1プロパティ方式でオブジェクトまたはエレメントを初期化するよりも、オブジェクト初期化子を優先する。
自動プロパティ
自動プロパティは、バッキングストア用に単一フィールドをラップするプロパティを書くときの面倒な作業を回避するための構文糖です。C# 2.0ではプロパティを次のようにして実装しました。
private int age; public int Age { get { return age; } set { age = value; } }
それほど長いコードではありませんが、多くのプロパティを実装する必要がある場合は面倒になるでしょう。C# 3.0では、次のような方法で、バッキングストア用のフィールドを宣言せずにプロパティを作成できます。
public int Age { get ; set ; }
バッキングストアで使われるフィールドはコンパイラによって自動生成されますが、これを直接操作することはできません。このプロパティへのすべてのアクセスは、プロパティのgetterメソッドとsetterメソッドを介して行う必要があります。
使用時のヒント
- パブリックフィールドよりも自動プロパティを優先する。
- パフォーマンスが重視される場合は自動プロパティを避ける。
Microsoftは特定の理由から多くの新しいC# 3.0の構文を作成しましたが、開発者は適用可能であればいつでも新機能を使用できます。このガイドラインでは、新しいC# 3.0の構文を使用するときに陥りがちな落とし穴とそれを回避するために役立つアドバイスを示しましたが、絶対に守らなければならない規則ではありません。状況によっては、明確な理由を持ってこのガイドラインに違反することもあるでしょう。しかし一般的には、新しいC# 3.0の構文の理解を深め、より良いコードを書くためにこのガイドラインが役に立つはずです。
