Odpowiedź jest w pierwszym akapicie. Chodzi o to, że własności dają szansę zareagować na zamianę/odczytanie wartości. Jak ktoś odczyta/zmieni zmienną publiczną to klasa się o tym nie dowie. W przypadku własności wywoływana jest odpowiednia metoda, która zrobi z wartością co chce. Metoda może wykonać dowolną akcję, nie tylko przypisanie wartości do zmiennej czy też jej odczytanie.
Ten przykład powinien wyjaśnić:
type
TTemperatura = class
private
FKelvin: Double;
function GetCelsius: Double;
function GetFahrenheit: Double;
procedure SetCelsius(Value: Double);
procedure SetFahrenheit(Value: Double);
public
property Kelvin: Double read FKelvin write FKelvin;
property Celsius: Double read GetCelsius write SetCelsius;
property Fahrenheit: Double read GetFahrenheit write SetFahrenheit;
end;
function TTemperatura.GetCelsius: Double;
begin
Result := FKelvin - 273.15;
end;
function TTemperatura.GetFahrenheit: Double;
begin
Result := FKelvin * (9/5) - 459.67;
end;
procedure TTemperatura.SetCelsius(Value: Double);
begin
FKelvin := Value + 273.15;
end;
procedure TTemperatura.SetFahrenheit(Value: Double);
begin
FKelvin := (Value + 459.67) * 5/9;
end;
Jak widzisz zmienna jest tylko jedna (FKelvin), a sporządzone własności dają możliwość korzystania z tej zmiennej w różnych jednostkach.