Как я понимаю, поля и методы вам уже понятны.
Например, есть у вас код который выводит в консоль площадь квадрата:
void Calculate()
{
var quad = new Quad();
quad.Size = 10;
Console.WriteLine(quad.Area);
}
А сам класс квадрата определён так:
class Quad
{
public float Size;
public float Area;
}
Как видно, площадь (Area) никто не вычисляет и выводится всегда будет 0, т.е. код не работает.
Чтобы его починить нужно что-бы кто-то эту площадь.
(1) Самый тупой вариант, посчитать её в Calculatevoid Calculate()
{
var quad = new Quad();
quad.Size = 10;
quad.Area = quad.Size * quad.Size;
Console.WriteLine(quad.Area);
}
В этом варианте нам надо править код, который использует этот класс Quad. Если этого кода много, то это куча лишней работы. И в целом, класс Quad теряет смысл, все его переменные можно в методах объявить, это будет намного оптимальнее.
(2) Вариант чуть лучше - сделать метод расчёта площади в Quadclass Quad
{
public float Size;
public float Area;
public void UpdateArea()
{
Area = Size * Size;
}
}
Нам всё-равно нужно менять код использующий этот класс Quad, и добавлять вызов UpdateArea после изменения размера. Тоже не очень-то удобно.
Если Area надо всегда считать, то может лучше сделать метод?
class Quad
{
public float Size;
public float GetArea()
{
return Size * Size;
}
}
Теперь не нужно вызывать ничего лишнего, но нам придётся пройтись по всем старым использования поля Area и заменить их на вызов нового метода GetArea.
Но можно сделать метод GetArea похожим на поле Area и не придётся менять код его использующий. Для этого и применяются Свойства.
class Quad
{
public float Size;
public float Area
{
get { return Size * Size; }
}
}
При использовании класса Quad теперь Area выглядит как поле, но его нельзя менять т.к. у него нет set части.
Можно пойти другим путём, и пересчитывать поля Area при изменении размера:
class Quad
{
private float size;
public float Size
{
get { return size; }
set
{
size = value;
Area = size * size;
}
}
public float Area;
}
В таком варианте у нас Area считается при изменении Size, а не при доступе к Area. Какой вариант лучше - зависит от задачи и её требований.
Если подытожить, то Свойства это методы похожие по использованию на поля.
аццессор = accessor = средство доступа - обобщённое название для get и set