powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Наследование generic
15 сообщений из 15, страница 1 из 1
Наследование generic
    #39767107
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начал работать с Generic, возникли вопросы.
Исходные данные:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
type
  TFoo = class

type
  TxRegion = class(TFoo)

type
  TFooCollection<T: TFoo> = class(TObjectDictionary<Integer, T>);

type
  TxRegionCollection<T: TxRegion> = class(TFooCollection<T>);

...
class function TfrmBaseDict.GetDictionary(AList: TFooCollection<TFoo>): Boolean;

Вызываю процедуру:
...
var
ARegionCollection: TxRegionsList<TxRegion>;

begin
 ARegionCollection:= TxdsRegionsList.GetAll;
-- Ошибка приведения типов
if TfrmReasonDict.GetDictionary(ARegionCollection) then


end;



Как перебороть ошибку, немного запутался.
...
Рейтинг: 0 / 0
Наследование generic
    #39767194
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Осталось написать, что такое TxRegionsList и как объявлен TxdsRegionsList.GetAll
...
Рейтинг: 0 / 0
Наследование generic
    #39767374
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
type
  TxdsRegionsList = class(TObject)
  private
    { private declarations }
  protected
    { protected declarations }
  public
    { public declarations }
    class function GetAll: TxRegionsList<TxRegion>;
...
Рейтинг: 0 / 0
Наследование generic
    #39767441
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
приведи точный текст ошибки при
Код: pascal
1.
2.
3.
4.
5.
6.
var
ARegionCollection: TxRegionsList<TxRegion>;

begin
 ARegionCollection:= TxdsRegionsList.GetAll;
-- Ошибка приведения типов
...
Рейтинг: 0 / 0
Наследование generic
    #39767587
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747, вот так ошибки нет
Код: pascal
1.
  if TfrmReasonDict.GetDictionary(TFooCollection<TFoo>(ARegionsList))



Но это приведение типа, а без этого никак ?
...
Рейтинг: 0 / 0
Наследование generic
    #39767635
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Осталось написать, что такое TxRegionsListwsnet
Код: pascal
1.
2.
type
  TxdsRegionsList = class(TObject)
...
Рейтинг: 0 / 0
Наследование generic
    #39767639
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetНо это приведение типа, а без этого никак ?
Я так и не увидел что такое "TxRegionsList", как просили выше.
...
Рейтинг: 0 / 0
Наследование generic
    #39767645
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моя опечатка, извините.
Код: pascal
1.
2.
var
ARegionCollection: TxRegionCollection<TxRegion>;
...
Рейтинг: 0 / 0
Наследование generic
    #39767687
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оно?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
class function GetDictionary<T: TFoo>(AList: TFooCollection<T>): Boolean;

procedure Test;
var
  ARegionCollection: TxRegionCollection<TxRegion>;
begin
  ARegionCollection:= TxdsRegionsList.GetAll;
  TfrmBaseDict.GetDictionary<TxRegion>(ARegionCollection);
end;
...
Рейтинг: 0 / 0
Наследование generic
    #39767972
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vasilisk_, спасибо оно!)

Теперь забуксовал здесь:

Код: pascal
1.
 function FillDataset < T: TFoo > (AList:TFooCollection<T>): TdxMemData; virtual;



Ошибка

Код: pascal
1.
E2533 Virtual, dynamic and message methods cannot have type parameters (Delphi)
...
Рейтинг: 0 / 0
Наследование generic
    #39768104
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetVasilisk_, спасибо оно!)

Теперь забуксовал здесь:

Код: pascal
1.
 function FillDataset < T: TFoo > (AList:TFooCollection<T>): TdxMemData; virtual;



Ошибка

Код: pascal
1.
E2533 Virtual, dynamic and message methods cannot have type parameters (Delphi)


Потому что нельзя так. Виртуальные, динамические методы не могут быть дженериками.
...
Рейтинг: 0 / 0
Наследование generic
    #39768125
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite, печально как-то.
...
Рейтинг: 0 / 0
Наследование generic
    #39768284
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wsnetX-Cite, печально как-то.Покажи, зачем тебе параметризированный виртуальный метод, а я что-то придумаю
...
Рейтинг: 0 / 0
Наследование generic
    #39770928
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_, спасибо с этим разобрался. Возникла очередная заморочка:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
type

TfrmBaseDictionaryList = class(TForm)
MainDataList: TDictionaryList<TDictionary>;
class function GetDictionary < T: TDictionary > (AList: TDictionaryList<T>): Boolean;
end;
...

class function TfrmBaseDictionaryList.GetDictionary<T>(AList: TDictionaryList<T>): Boolean;
var
  AfrmBaseDictionaryList: TfrmBaseDictionaryList;
begin
  Result := False;
  Application.CreateForm(TfrmBaseDictionaryList, AfrmBaseDictionaryList);
  try
    AfrmBaseDictionaryList.MainDataList := AList;
...



[dcc32 Error] E2010 Incompatible types: 'UDictionary.TDictionaryList<UDictionary.TDictionary>' and 'UDictionary.TDictionaryList<UfrmBaseDictionaryList.TfrmBaseDictionaryList.GetDictionary.T>'
...
Рейтинг: 0 / 0
Наследование generic
    #39770945
Фотография wsnet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал вот так

Код: pascal
1.
 AfrmBaseDictionaryList.MainDataList := TDictionaryList<TDictionary>(AList);
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Наследование generic
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]