Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Наследование generic / 15 сообщений из 15, страница 1 из 1
30.01.2019, 15:27
    #39767107
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование generic
Начал работать с 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
30.01.2019, 16:27
    #39767194
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование generic
Осталось написать, что такое TxRegionsList и как объявлен TxdsRegionsList.GetAll
...
Рейтинг: 0 / 0
31.01.2019, 07:33
    #39767374
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование generic
_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
31.01.2019, 11:03
    #39767441
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование generic
приведи точный текст ошибки при
Код: pascal
1.
2.
3.
4.
5.
6.
var
ARegionCollection: TxRegionsList<TxRegion>;

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



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

Код: 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
01.02.2019, 10:58
    #39767972
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование generic
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
01.02.2019, 12:54
    #39768104
X-Cite
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование generic
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
01.02.2019, 13:16
    #39768125
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование generic
X-Cite, печально как-то.
...
Рейтинг: 0 / 0
01.02.2019, 15:47
    #39768284
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование generic
wsnetX-Cite, печально как-то.Покажи, зачем тебе параметризированный виртуальный метод, а я что-то придумаю
...
Рейтинг: 0 / 0
08.02.2019, 09:22
    #39770928
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование generic
_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
08.02.2019, 09:44
    #39770945
wsnet
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Наследование generic
Сделал вот так

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


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