Как я могу сделать свойство "Писать один раз читать много" в VB.NET? - PullRequest
7 голосов
/ 12 января 2010

Каков наилучший способ сделать свойство класса «Писать один раз, прочитать много» таким, чтобы вы могли установить это свойство только один раз?

Я знаю, что могу передать все свойства в конструкторе и сделать их ReadOnly, но в случаях с большим количеством свойств мне не нужен конструктор, имеющий более 20 аргументов.

Кроме того, я понимаю, что могу «свернуть свои собственные» сеттеры, но необходимость делать это для каждого свойства выглядит как куча избыточного кодирования.

Есть ли чистый способ сделать это в VB 2008 .NET 3.5?

Ответы [ 3 ]

2 голосов
/ 12 января 2010

Свойство «Один раз написать» никогда не бывает «чистым».

Я бы порекомендовал создать класс builder / factory, чтобы избежать CTor с 20 параметрами. (Да, я знаю, что это довольно много печатать)

Подобное обсуждение здесь: Должен ли я использовать переменные set one?

[править] Более того, даже если вы настаиваете, я не вижу другого варианта, кроме как бросать свои собственные сеттеры, что тоже много печатает.

2 голосов
/ 04 октября 2012

Я знаю, что прошло уже почти 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; }
}
0 голосов
/ 12 января 2010

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

...