2016-02-18 15 views
8

Bir .NET 4.6.1 C# projesi mülkiyet beyanının de gördükBir özelliği bildirirken "=>" .Net C# ne yapar?

public object MyObject => new object(); 

böyle sadece özelliklerini okumak ilan alışığım: Anlıyorum

public object MyObject { get; } 

orada ikisi arasındaki bazı farklar (ilki yeni bir nesne yaratır), ama daha derin bir açıklama ve bunların her ikisini de kullanmanın bazı endikasyonlarını istiyorum.

+0

sorunuzun eklendi. Bu aynı zamanda LINQ'daki ile aynı mıdır, çünkü ben de merak ediyorum. '(t => t.Whatever)' – Aizen

+0

@Aizen: Hayır, aynı değil. – David

cevap

14

İlk, yeni-to-C# -6 ifade-gövdeli üye sözdizimini kullanır. Otomatik olarak salt okunur uygulamıştır özellik - İkinci Ayrıca yeni 6 C# için olduğunu

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

: Bu eşdeğerdir.

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

Yalnızca aslında sadece yerine alanına atar ilan sınıf, bir yapıcı içinden MyObject atayabilirsiniz: için bu eşdeğerdir.

(bunlara "eşitlikler" Her ikisi de her zaman bloklar kod içerdiği get, set veya her ikisini birden eski okul mal bildiriminde, kullanıyorsunuzdur.)

+2

SO'nun en yüksek puanlı üyesi utanç verici "onun bir yinelenen" seçeneği atlamak değil. –

+3

@MeirionHughes: Bu durumda, bu soru özellikle otomatik olarak uygulanan salt okunur özellik ile ifade gövdeli üye özelliği arasındaki farkı soruyor. Yinelenen bunu sormaz. Her iki şekilde de görebilirim. –

+0

O zaman tekrar açılmasın mı? Tek başına yapmak için itibarın var. –

3

C# 6, mülk alıcıyı her aradığınızda ok işlevinin sağındaki ifadeyi değerlendirir.

Sizin durumunuzda, her seferinde bir new object() örneğini oluşturacaksınız. Diğer durumda, tesisin arka alanından okuyacaktır.