Стратегии, когда использовать свойства и когда использовать внутренние переменные на внутренних классах? - PullRequest
4 голосов
/ 23 мая 2010

Почти во всех моих классах у меня есть смесь свойств и внутренних переменных класса .Я всегда выбирал одно или другое по правилу " свойство, если оно вам нужно извне, переменная класса, если не ".Но есть много других проблем, которые заставляют меня часто переосмысливать это, например:

  • , в какой-то момент я хочу использовать внутреннюю переменную вне класса, поэтому мне нужно рефакторинг это свойство, которое заставляет меня задуматься, почему я не просто делаю все свойства своих внутренних переменных на случай, если мне все равно придется обращаться к ним извне, так как большинство классов в любом случае являются внутренними классами это не такв API, поэтому не имеет значения, доступны ли внутренние переменные извне класса или нет

  • , но так как C # не позволяет вам создавать экземпляры, например List<string>свойство в определении, тогда эти свойства должны быть инициализированы в каждом возможном конструкторе , поэтому эти переменные я бы предпочел иметь внутренние переменные просто для того, чтобы все было чище, поскольку все они инициализируются в одном месте

  • Код C # читается более четко, если параметры конструктора / метода имеют верблюжий случай, и вы присваиваете их паскалю cИспользуйте свойства вместо неоднозначности для просмотра templateIdCode и необходимости осмотреться, чтобы увидеть, является ли это локальной переменной, параметром метода или внутренней переменной класса, например, когда вы видите TemplateIdCode = templateIdCode, это легчеявляется параметром, присваиваемым свойству класса.Это будет аргумент для всегда , использующего только свойства для внутренних классов .

Например:

public class TextFile
{
    private string templateIdCode;
    private string absoluteTemplatePathAndFileName;
    private string absoluteOutputDirectory;
    private List<string> listItems = new List<string>();

    public string Content { get; set; }
    public List<string> ReportItems { get; set; }

    public TextFile(string templateIdCode)
    {
        this.templateIdCode = templateIdCode;
        ReportItems = new List<string>();
        Initialize();
    }
    ...

При создании внутренних (классы, не относящиеся к API), каковы ваши стратегии при принятии решения о создании внутренней переменной класса или свойства?

1 Ответ

1 голос
/ 23 мая 2010

Если у меня есть частная переменная, которая, по моему мнению, требует публичного доступа на более позднем этапе, я просто создаю свойство, которое использует ее как свой закрытый член, например:

private List<string> listItems = new List<string>();

Public List<string> ListItems
{
     get{return listItems;}
     set{listItems = value;}
}

Это позволяет вам создавать публичный доступ к данным без необходимости рефакторинга какого-либо кода. Это также позволяет вам инициализировать данные в приватном члене, и не нужно делать это в конструкторе.
Еще одним преимуществом является то, что любые изменения данных, которые вы хотите выполнить для любого, кто имеет доступ к общедоступному свойству, могут быть сделаны в получателе свойства. Несмотря на то, что в VS2008 введены автоматические свойства как функция, я все же предпочитаю стиль свойств VS2005.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...