Я подробно читал C # Джона Скита и наткнулся на объяснение автоматически реализуемых свойств в C # 3.
Код для этого был:
class Product
{
public string Name { get; private set; }
public decimal Price { get; private set; }
public Product(string name, decimal price)
{
Name = name;
Price = price;
}
Product() {}
public static List<Product> GetSampleProducts()
{
return new List<Product>
{
new Product { Name="West Side Story", Price = 9.99m },
new Product { Name="Assassins", Price=14.99m },
new Product { Name="Frogs", Price=13.99m },
new Product { Name="Sweeney Todd", Price=10.99m}
};
}
}
И текст, объясняющий это,
Теперь со свойствами не связан какой-либо код (или видимые переменные!), И вы создаете жестко запрограммированный список совсем другим способом. При отсутствии переменных имени и цены для доступа вы вынуждены использовать свойства повсюду в классе, что улучшает согласованность. Теперь у вас есть частный конструктор без параметров для новой инициализации на основе свойств. (Этот конструктор вызывается для каждого элемента перед установкой свойств.) В этом примере вы могли бы полностью удалить общедоступный конструктор, но тогда никакой внешний код не смог бы создать другие экземпляры продукта.
Я не могу обернуть голову вокруг части, выделенной жирным шрифтом. В нем говорится, что частный конструктор существует для автоматически реализуемых свойств и вызывается каждый раз перед его установкой. Однако даже когда я вставил туда консоль, она не вызывалась. И даже после удаления частных конструкторов код работал нормально.
Я знаю роль частных конструкторов в C #, но не могу понять, как это связано с автоматически реализуемыми свойствами, если это взято из приведенного выше текста.