Свойства должны быть доступны в любой момент времени. Свойства должны быть доступны в любом порядке вызова и быть не зависимыми от других свойств.
Если для инициализации свойства нужен вызов некоторого метода, то лучше использовать ленивую инициализацию:
public class User
{
private UserProfile profile;
public UserProfile Profile
{
get
{
if (profile == null)
profile = LoadProfile(userId);
return profile;
}
}
}
Если ленивая инициализация по какой-то причине не годится, то стоит закрыть тайное знание соответствующим сообщением:
public UserProfile Profile
{
get
{
if (profile == null)
throw new ApplicationException("Call Init method before!");
return profile;
}
}
Вариант, когда свойство падает без указания причин, просто потому что не вызван метод Init, про который знает только разработчик класса, это плохой стиль.
Ссылочные свойства должны быть только для чтения (если, конечно, логикой программы не предусмотрено другое поведение, но такое бывает редко):
private ArrayList userList = new ArrayList();
public ArrayList UserList
{
get
{
return userList;
}
}
Сейчас предоставляется доступ только к содержимому списка, т.е. к его элементами. Если же здесь предоставить метод set, то вполне можно полностью поломать список, записав в него новое значение.
No comments:
Post a Comment