2016-02-18 2 views
8

私は私がこのような読み取り専用のプロパティを宣言するために使用しています.NET 4.6.1 C#プロジェクト"=>"プロパティを宣言するときに.Net C#で何をしますか?

public object MyObject => new object(); 

でプロパティ宣言のこの種のを見てきました:

public object MyObject { get; } 

私がそこにいることを理解します2いくつかの違いは、(最初​​のものは、新しいオブジェクトを作成します)ですが、私はより深い説明だけでなく、それらのいずれかを使用する際のいくつかの兆候をしたいと思います。

+0

は、あなたの質問に追加しました。私も好奇心が強いので、これはLINQのものと同じですか? 'ここで、(T => t.Whatever)' – Aizen

+0

@Aizen:いいえ、それは同じではありません。 – David

答えて

14

最初はnew-to-C#-6 式身体のメンバー構文を使用します。 - 自動的に読み取り専用プロパティを実装

public object MyObject 
{ 
    get { return new object(); } 
} 

秒も新しいC#6からです:それはと同等です。それはと同等です:

private readonly object _myObject; // Except using an unspeakable name 
public object MyObject 
{ 
    get { return _myObject; } 
} 

あなただけ実際にだけではなく、フィールドに割り当てる宣言クラスでコンストラクタ内からMyObjectに割り当てることができます。

(これらの「等価性」あなたはいつものコードを含むブロックとしてgetsetまたはその両方を持っている古い学校のプロパティ宣言を、使用しているの両方。)

+2

SOの最高得点メンバーは、その「重複」オプションに飛び乗っていません。 –

+3

@MeirionHughes:まあ、この場合には、この問題は特に違いについて尋ねているが自動的に読み取り専用プロパティと表現ボディのメンバープロパティを実装しました。重複はそれについて尋ねることはありません。私はそれをどちらかの方法で見ることができます。 –

+0

もう一度開きませんか?あなたはそのように独裁的に行うという評判を持っています。 –

3

C#6は、矢印関数の右あなたがプロパティのゲッターを呼び出すたびに式を評価します。

は、あなたのケースでは、あなたはnew object()を毎回インスタンス化したいです。他の場合には

、それは財産のバッキングフィールドから読んでいました。

関連する問題