Использование индексных свойств в классе TShape на Delphi: автоматизация работы с данными
Вопрос, который стоит перед разработчиком, заключается в использовании индексных свойств для упрощения доступа к данным объекта. В частности, речь идет о классе TShape, который имеет свойства Height, Width и Depth, и желании обращаться к ним через индексы, аналогично массивам.
Описание задачи
У нас есть класс TShape, который описывает геометрический объект с тремя измерениями: высотой, шириной и глубиной. Свойства этих измерений реализованы через индексные свойства, но текущий способ присвоения значений переменным не использует этот функционал.
type
TShape = class
private
FHeight: Integer;
FWidth: Integer;
FDepth: Integer;
public
constructor CreateShape(AHeight, AWidth, ADepth: Integer);
property Height: Integer index 0 read FHeight write FHeight;
property Width: Integer index 1 read FWidth write FWidth;
property Depth: Integer index 2 read FDepth write FDepth;
end;
Конструктор класса TShape.CreateShape инициализирует приватные поля FHeight, FWidth и FDepth. Сейчас для присвоения значений переменным используется имя свойства, например:
Задача состоит в том, чтобы использовать индекс свойства для присвоения переменной, например, height1 := cube[0].
Решение проблемы
В документации RAD Studio указано, что индексные спецификаторы позволяют использовать один и тот же функционал получения (геттер) и установки (сеттер) значений для нескольких свойств. Это не то, что требуется в данной задаче. Вместо этого, нужно реализовать свойство, которое будет работать как массив.
Для реализации такого свойства можно создать функцию GetDimension, которая будет возвращать значение измерения по индексу:
type
TShape = class
private
FDimensions: array[0..2] of Integer;
function GetDimension(Index: Integer): Integer;
public
constructor CreateShape(AHeight, AWidth, ADepth: Integer);
property Height: Integer index 0 read GetDimension;
property Width: Integer index 1 read GetDimension;
property Depth: Integer index 2 read GetDimension;
property Dimensions[Index: Integer]: Integer read GetDimension;
end;
И соответствующую реализацию функции GetDimension:
function TShape.GetDimension(Index: Integer): Integer;
begin
if (Index >= 0) and (Index <= 2) then
Result := FDimensions[Index]
else
raise Exception.Create('Invalid dimension index');
end;
Теперь можно обращаться к свойствам Height, Width и Depth через геттер, а также использовать свойство Dimensions для доступа к измерениям через индекс:
Задача заключается в реализации доступа к свойствам объекта `TShape` через индексы для упрощения работы с данными, используя функцию индексированного геттера в классе Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.