используя два разных открытых свойства, чтобы «получить» одну и ту же приватную переменную с разными типами возврата - PullRequest
1 голос
/ 13 мая 2009

У меня есть класс Customer, у которого есть свойство List <string> Roles. Большую часть времени я хочу получить доступ к этому свойству как к списку строк, но иногда я хочу видеть его как список, разделенный запятыми.

Я, конечно, мог бы сделать это в новом методе, и если бы я ожидал получить значение переменной в разных форматах (с разделителями-запятыми, с разделителями табуляции и т. Д.), Я бы, конечно, сделал это. Однако мне нравится идея использовать два разных свойства для доступа к значению переменной, что-то вроде

public List<string> Roles 
{
    get { return this._Roles; }
    set { this._Roles = value; } 
}

и

public string RolesToString
{
    get { do some work here to comma-delimit the list; }
}

По сути, я хочу переопределить метод ToString () этого конкретного списка. Есть ли веские причины делать 1 над другим? Является ли использование двух разных свойств для возврата одного и того же значения переменной достаточно нестандартным, чтобы вызвать красные флаги?

Ответы [ 3 ]

10 голосов
/ 13 мая 2009

Я бы сделал ваше второе "свойство" методом. Он выполняет дополнительную обработку вашего списка и возвращает что-то, что не является прямым «свойством» объекта, а скорее обработанной версией свойства объекта. Это похоже на разумный метод выбора.

Мои предпочтения будут:

public List<string> Roles 
{
    get { return this._Roles; }
    set { this._Roles = value; } 
}

public string GetRolesAsString()
{
    // Do processing on Roles
}
3 голосов
/ 13 мая 2009

Как говорит Рид, это, вероятно, должен быть Метод, но это своего рода субъективно.

Обратите внимание, что вам не нужно много кода для этого - просто вызов Join ()

public string RolesAsString()
{
    return String.Join(", ", this._Roles);
}

И учитывая, что объединение строк в .NET так просто, вам действительно нужен метод / свойство для этого?

0 голосов
/ 13 мая 2009

У меня нет проблем с тем, что вы предлагаете. За исключением того, что я бы назвал это RolesString .

Но ... Почему только добытчик? Если я могу установить свойство Roles, почему я не могу установить свойство RolesString?

Дополнительная обработка не обязательно означает, что метод должен использоваться.

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