Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизПереопределение свойства класса-наследника Найти похожие ветки
← →
Verner © (2012-05-16 09:20) [0]Здравствуйте, уважаемые мастера. Пытаюсь создать класс, наследник класса TList модуля Classes^:
TScheduleTime = record
TimeStamp: TDateTime;
Active: boolean;
Done: boolean;
end;
PScheduleTime = ^TScheduleTime;//тип свойства, с которым идет работа
// Список времен расписания.
TScheduleTimeList = class (TList)
private
function GetItems:PScheduleTime;
public
function NewTime(aTimeStamp: TDateTime; aActive: boolean; aDone: boolean): PScheduleTime;
property Items[aIndex: integer]: PScheduleTime read GetItems; default;
end;
Реализовал тело функции GetItems, возвращающей значение свойства, для заглушки:
function TScheduleTimeList.GetItems:PScheduleTime;
var PSH:PScheduleTime;
begin
Result:=PSH;
end;
При нажатии на проверку синтаксиса, ругается на эту строку
property Items[aIndex: integer]: PScheduleTime read GetItems; default;
-- Incompatible types
Пробовал это свойство объявить с типом Pointer, как в род. классе TList - не помогает. Буду очень благодарен, если кто сможет сказать, в чём тут дело.
← →
Медвежонок Пятачок © (2012-05-16 09:24) [1]ну как минимум гетитемс должно иметь один параметр
← →
Dimka Maslov © (2012-05-16 09:26) [2]Во первых GetItems должен быть объявлен как function GetItems(AIndex: Integer): PScheduleTime. А во вторых то, как сделано это прямая дорога к access violation и полной неработоспособности
← →
Verner © (2012-05-16 09:51) [3]Огромное спасибо, не докумекал!
>>А во вторых то, как сделано это прямая дорога к access violation и полной неработоспособности<<
Ну так конструктор и деструктор еще не реализованы, не весь функционал класса.
← →
Dimka Maslov © (2012-05-16 10:05) [4]
> Ну так конструктор и деструктор еще не реализованы, не весь
> функционал класса.
Внимательно смотрим, что возвращает функция GetItems:
Значение неинициализированного указателя, являющегося внутренней переменной функции. С тем же успехом можно было просто использовать генератор случайных чисел. Так делать нельзя.
← →
KSergey © (2012-05-16 12:48) [5]Я чета не понял: у класса TList есть метод Get (а не GetItems)
TScheduleTimeList = class (TList)
protected // а не private
function Get(Index: Integer): PScheduleTime;
public
function NewTime(aTimeStamp: TDateTime; aActive: boolean; aDone: boolean): PScheduleTime;
property Items[aIndex: integer]: PScheduleTime read Get; default;
end;
function TScheduleTimeList.Get(Index: Integer): PScheduleTime;
begin
Result := inherited Get(Index);
end;
function TScheduleTimeList.NewTime(aTimeStamp: TDateTime; aActive: boolean; aDone: boolean): PScheduleTime;
begin
end;
← →
Ega23 © (2012-05-16 15:43) [6]У TList надо Notify перекрыть.
← →
Leonid Troyanovsky © (2012-05-16 18:28) [7]
> Ega23 © (16.05.12 15:43) [6]
> У TList надо Notify перекрыть.
А оно у него есть?
--
Regards, LVT.
← →
Leonid Troyanovsky © (2012-05-16 18:44) [8]
> Leonid Troyanovsky © (16.05.12 18:28) [7]
> А оно у него есть?
Есть. Всем расслабиться.
Sorry.
--
Regards, LVT.
← →
KSergey © (2012-05-17 08:10) [9]> Ega23 © (16.05.12 15:43) [6]
> У TList надо Notify перекрыть.
Как это решит задачу получения от Items[] типа PScheduleTime ?
Это уже следующий шаг )
← →
Romkin © (2012-05-24 18:03) [10]Вообще говоря, писать потомка TList и использовать его - крайне неблагодарное занятие. Его использовать надо.
← →
MBo © (2012-05-24 19:19) [11]>Romkin © (24.05.12 18:03) [10]
Мощно задвинул ;)
← →
Ega23 © (2012-05-24 19:25) [12]
> Мощно задвинул ;)
Я даже знаю откуда у этого задвига ноги растут. Более того, я с ним в целом согласен.
Не далее как в прошлый четверг сидели мы с Ромой у меня на кухне, пили "Лакинское" и "Чешское" и как раз бурно обсуждали: имеет ли смысл писать наследников от TList, либо делать класс-обёртку над листом, вынося в паблик ровно то, что нужно видеть снаружи.
Т.е.TMyList = class (TList)
vs.TMyList = class (TObject)
private
FItems: TList
public
Items
count
etc
end;
Сошлись на втором.
Точнее, сошлись на TObjectList<T>, но потом - на втором. :)
← →
MBo © (2012-05-25 05:49) [13]>Ega23
Мне сдаётся, что Роман выдал только часть мысли. Тебе эта незавершённость понятна благодаря контексту, а я вот недопонял... Вот, например, слово "его" в первом и втором предложении относится к одной и той же сущности?
← →
Romkin © (2012-05-25 15:24) [14]Ну под вечер из меня моща так и прет. Включать список в свой объект надо, обычный пример - Components + ComponentsCount и т.д.
А топикстартеру я бы рекомендовал посмотреть на TCollection, и не извращаться с выделением памяти под записи.
← →
Amoeba_ (2012-05-25 15:40) [15]
> А топикстартеру я бы рекомендовал посмотреть на TCollection
Здесь статья Ю.З.
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=215
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.067 c