2016-04-24 4 views
5

Microsoft представит новый синтаксис в C# 6, которые позволяют установить свойство только для чтения, как показано ниже:свойство только для чтения в C# 6.0

public class Animal 
{ 
    public string MostDangerous { get; } = "Mosquito"; 
} 

Мне интересно, что добавленная стоимость такого подхода ,

Какая разница, просто писать:

public class Animal 
{ 
    public const string MostDangerous = "Mosquito"; 
} 

или даже:

public class Animal 
{ 
    public string MostDangerous 
    { 
     get 
     { 
      return "Mosquito"; 
     } 
    } 
} 
+6

А что-то вроде: 'общественной DateTime CreationTime {получить; } = DateTime.Now; '? –

+0

Просмотрите эту статью, чтобы узнать, что стоит за новыми функциями C# 6: https://www.simple-talk.com/dotnet/.net-framework/whats-new-in-c-6/ –

ответ

10

Ваш пример немного ограничен. Посмотрите на этот фрагмент:

class Foo 
{ 
    public DateTime Created { get; } = DateTime.Now; // construction timestamp 

    public int X { get; } 

    public Foo(int n) 
    { 
     X = n; 
    } 
} 

Свойства только для чтения для каждого экземпляра и могут быть установлены из конструктора. Очень отличается от поля const, значение которого должно быть определено во время компиляции. Инициализатор свойств является отдельной функцией и следует правилам и ограничениям инициализаторов полей.

+0

Отличный пример, чтобы понять это , Спасибо @Henk Holterman – ehh

2

Новый синтаксис - это попытка уменьшить многословие C#. Это просто синтаксический сахар. Созданный IL похож на свойство auto с геттером и хранилищем резервных копий.

1

Это усовершенствование C# был взят непосредственно из VB, и устраняет необходимость выполнения поля подкладочного и инициализатор конструктора:

Public ReadOnly dateStamp As DateTime = Datetime.Now 
+0

Авто недвижимости VB было взято непосредственно из C# – Gqqnbig