Я подробно читал 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 #, но я не могу понять, как это связано с автоматически реализуемыми свойствами, если это из текста выше.