pascalabcnet/TestSuite/CompilationSamples/Properties.pas
Бондарев Иван e6e67c193c initial commit
2015-05-14 21:35:07 +02:00

35 lines
1.1 KiB
ObjectPascal

// Свойства (properties)
type
/// Класс персоны
Person = class
private
nm: string;
ag: integer;
procedure SetAge(a: integer); // Процедура доступа к свойству располагается обычно в приватной секции
begin
if a<0 then // Перед установкой значения свойства мы можем сделать дополнительные проверки
a := 0; // и скорректировать значение свойства, либо сгенерировать исключение
ag := a;
end;
public
constructor (n: string; a: integer);
begin
nm := n; ag := a;
end;
/// Имя персоны
property Name: string read nm; // Свойство Name доступно только на чтение и возвращает значение поля nm
/// Возраст персоны
property Age: integer read ag write SetAge;
procedure Print;
begin
writeln('Имя: ',nm,' Возраст: ',ag);
end;
end;
var p: Person := new Person('Иванов', 20);
begin
writeln('Имя: ',p.Name); // Менять Name нельзя, доступ - только на чтение
p.Age := -1; // Попытка изменения возраста на отрицательное значение приводит к корректировке: возраст становится = 0
writeln('Возраст: ',p.Age);
end.