Я уверен, что другие будут давать разные очки, но вот мои главные 2 причины использования get / sets.Если они не применяются для данного свойства, скорее всего, я не буду использовать методы получения / установки.
1 - Отладка Это значительно облегчает отладку распространения данных (как данные передаются), если вы можете отлаживать сеттер, который вас беспокоит.Вы можете легко добавить вызов Debug.Print
и отладить установленное значение, если вас беспокоит, что ему передано неправильное значение.Или вы можете установить точки останова и отладить трассировку стека.Например:
class Shape {
public void setWidth(int w) {
if(w < 0)
Debug.Print("width is less than 0!");
width = w;
}
public void setHeight(int h) {
height = h;
}
protected int width;
protected int height;
}
2 - действия по изменению значения Возможно, есть лучшие способы добиться этого, но мне нравится иметь возможность добавлять простую логику к сеттерам, чтобы гарантировать, что любая логика, которая должна работать при изменении значения, делает это.Например, я могу использовать следующее:
public void SetWindowHeight(int newHeight)
{
if(WindowHeight == newHeight)
return;
WindowHeight = newHeight;
UpdateWindowDisplay();
}
public int GetWindowHeight()
{
return WindowHeight;
}
private int WindowHeight;
public void UpdateWindowDisplay()
{
Window.UpdateHeight(WindowHeight);
// Other window display logic
}
Хотя лично я предпочитаю использовать свойство get / sets, но это только мои предпочтения.
public int WindowHeight
{
get
{
return windowHeight;
}
set
{
if(windowHeight == value)
return;
windowHeight = value;
UpdateWindowDisplay();
}
}
private int windowHeight;
public void UpdateWindowDisplay()
{
Window.UpdateHeight(WindowHeight);
// Other window display logic
}