2016-02-18 15 views
8

Widziałem tego rodzaju deklaracji majątkowych w .NET projektu 4.6.1 C#Co robi "=>" w .Net C# podczas deklarowania właściwości?

public object MyObject => new object(); 

Przywykłem do stwierdzenia właściwości tylko do odczytu tak:

public object MyObject { get; } 

Rozumiem, że istnieje są pewne różnice między tymi dwoma elementami (pierwszy tworzy nowy obiekt), ale chciałbym głębiej wyjaśnić, a także wskazać, kiedy należy skorzystać z któregoś z nich.

+0

dodany do Twojego pytania. Jest to również to samo, co w LINQ, ponieważ jestem ciekawy. the 'Where (t => t.Whatever)' – Aizen

+0

@Aizen: Nie, to nie to samo. – David

Odpowiedz

14

Pierwsza wykorzystuje składnię o strukturze wyrażenia "nowy-do-C# -6 " składnia. Jest to równoznaczne z:

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

Drugi również nowe do C# 6 - Automatycznie realizowane tylko do odczytu nieruchomość. Jest to równoznaczne z:

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

można przypisać tylko do MyObject od wewnątrz konstruktora w klasie stwierdzającej, które w rzeczywistości tylko przypisuje polu zamiast.

(zarówno tych „odpowiedniki” używasz oświadczeń majątkowych starej szkole, gdzie zawsze masz get, set lub zawierające zarówno jako bloki kodu).

+2

To wstyd, że członek SO o najwyższej ocenie nie przeskoczył do opcji "jest duplikatem". –

+3

@MeirionHughes: Cóż, w tym przypadku pytanie to dotyczy właśnie różnicy między automatycznie zaimplementowaną własnością tylko do odczytu a właściwością elementu o właściwościach wyrażeń. Duplikat nie pyta o to. Widzę to w obie strony. –

+0

Czy nie należy również ponownie otworzyć? Masz reputację, aby robić to samodzielnie. –

3

C# 6 ocenia wyrażenie po prawej stronie funkcji strzałki za każdym razem, gdy wywoływana jest właściwość getter.

W twoim przypadku za każdym razem utworzysz new object().

W innym przypadku byłby to odczyt z pola kopii właściwości.