Как я могу сделать свойство "Писать один раз читать много" в 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; }
}

Самым "чистым" способом было бы вообще не делать этого и использовать авто свойства. Я тоже не вижу необходимости в этом. Неужели так важно, чтобы их можно было написать только один раз? Если это так, я бы определенно пошел с конструктором, который принимает значения для всех свойств в качестве параметров.

Другие вопросы по тегам