Как я могу сделать свойство "Писать один раз читать много" в VB.NET?
Каков наилучший способ сделать свойство класса "Записать один раз, прочитать много" таким, чтобы вы могли установить это свойство только один раз?
Я знаю, что могу передать все свойства в конструктор и сделать их ReadOnly, но в случаях с большим количеством свойств мне не нужен конструктор, имеющий более 20 аргументов.
Кроме того, я понимаю, что могу "свернуть свои собственные" сеттеры, но необходимость делать это для каждого свойства выглядит как куча избыточного кодирования.
Есть ли чистый способ сделать это в VB 2008 .NET 3.5?
3 ответа
Свойство "Записать один раз" никогда не бывает "чистым".
Я бы порекомендовал создать класс builder/factory, чтобы избежать CTor с 20 параметрами. (Да, я знаю, что это довольно много печатать)
Подобное обсуждение здесь: я должен использовать переменные set one?
[править] Более того, даже если вы настаиваете, я не вижу другого варианта, кроме как бросать свои собственные сеттеры, что тоже много печатает.
Я знаю, что прошло уже почти 3 года, но вот мое решение, которое я считаю лучше:
public class Site
{
private int miID;
public Site(int iNewID, string sName)
{
miID = iNewID;
Name = sName;
}
// The ID property can only be set once in the constructor
public int ID
{
get { return miID; }
}
public string Name { get; set; }
}
Самым "чистым" способом было бы вообще не делать этого и использовать авто свойства. Я тоже не вижу необходимости в этом. Неужели так важно, чтобы их можно было написать только один раз? Если это так, я бы определенно пошел с конструктором, который принимает значения для всех свойств в качестве параметров.