Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Подключить только один юнит в прикладном коде  [new]
ma1tus
Member

Откуда:
Сообщений: 738
Доброго ) Сабж - цель; есть юнит с сustom-классом, есть юниты с его наследниками.

В публичном интерфейсе custom-класса используются типы из его же юнита, вроде того:
unit uMySuperClass; 

type
  TMyOption = (opOne, opTwo, ...);
  TMyOptions = set ot TMyOption;

TCustomMyClass = class
public
  property MyOptions: TMyOptions read ... 
end;


В программе хочется подключать только юнит класса-наследника, но что делать с используемыми типами ?

Навскиду - два варианта:

1) лепить алиасы в каждом юните с наследником,
unit uMySubClass1;

uses
  uMySuperClass;

type
  TMyOptions = MySuperClass.TMyOptions;
  // и т.д. 

или

2) навертеть через fluent interface, типа
MyOptions.AddOne.AddTwo...


Может - что-нибудь ещё / иначе как-то поменять интерфейс custom-класса ?

Сообщение было отредактировано: 18 май 20, 16:00
18 май 20, 16:01    [22135113]     Ответить | Цитировать Сообщить модератору
 Re: Подключить только один юнит в прикладном коде  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 26574
Типы вынести в отдельный модуль.
18 май 20, 16:04    [22135118]     Ответить | Цитировать Сообщить модератору
 Re: Подключить только один юнит в прикладном коде  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 49980

ma1tus
В программе хочется подключать только юнит класса-наследника, но что делать с
используемыми типами ?

Перехотеть и понять, что компилятор не в состоянии использовать типы без их определения.
При этом он не хочет собирать эти определения из целого дерева модулей, ограничиваясь
только непосредственно подключенными.

Posted via ActualForum NNTP Server 1.5

18 май 20, 16:04    [22135119]     Ответить | Цитировать Сообщить модератору
 Re: Подключить только один юнит в прикладном коде  [new]
ma1tus
Member

Откуда:
Сообщений: 738
wadman,
:(
необходимость вспоминать, что надо подключать... "что-то там еще ?" - это то, чего хотелось избежать / "объехать на какой-нибудь не самой кривой" :-) .
18 май 20, 16:14    [22135134]     Ответить | Цитировать Сообщить модератору
 Re: Подключить только один юнит в прикладном коде  [new]
ma1tus
Member

Откуда:
Сообщений: 738
Dimitry Sibiryakov,

да, реальность сурова. Спасибо.
18 май 20, 16:15    [22135136]     Ответить | Цитировать Сообщить модератору
 Re: Подключить только один юнит в прикладном коде  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 26574
ma1tus
необходимость вспоминать, что надо подключать... "что-то там еще ?" - это то, чего хотелось избежать / "объехать на какой-нибудь не самой кривой" :-) .

С такими замашками пора в руководители проектов метить.
18 май 20, 16:32    [22135151]     Ответить | Цитировать Сообщить модератору
 Re: Подключить только один юнит в прикладном коде  [new]
ma1tus
Member

Откуда:
Сообщений: 738
wadman,

Пора, брат, пора (с)
18 май 20, 16:37    [22135156]     Ответить | Цитировать Сообщить модератору
 Re: Подключить только один юнит в прикладном коде  [new]
alekcvp
Member

Откуда:
Сообщений: 2035
Только с наследниками ИМХО.

Сообщение было отредактировано: 18 май 20, 17:00
18 май 20, 17:01    [22135173]     Ответить | Цитировать Сообщить модератору
 Re: Подключить только один юнит в прикладном коде  [new]
ma1tus
Member

Откуда:
Сообщений: 738
ma1tus
TCustomMyClass = class
public
  type
    TMyOption = (opOne, opTwo);
    TMyOptions = set ot TMyOption;
private
  FMyOptions: TMyOptions;
public
  property MyOptions: TMyOptions read ... 
end;

Длинно, но, собственно - по условию задачи )
MySubClass1.MyOptions := [TMySubClass.TMyOption.opOne, TMySubClass.TMyOption.opTwo];
18 май 20, 20:27    [22135299]     Ответить | Цитировать Сообщить модератору
 Re: Подключить только один юнит в прикладном коде  [new]
ma1tus
Member

Откуда:
Сообщений: 738
alekcvp
Только с наследниками ИМХО.
да, всё-таки - этот вариант; другие - "рвут шаблон".
19 май 20, 03:06    [22135450]     Ответить | Цитировать Сообщить модератору
 Re: Подключить только один юнит в прикладном коде  [new]
rgreat
Member

Откуда:
Сообщений: 5934
Dimitry Sibiryakov
Перехотеть и понять, что компилятор не в состоянии использовать типы без их определения.
При этом он не хочет собирать эти определения из целого дерева модулей, ограничиваясь
только непосредственно подключенными.

Тут недавно выяснилось что в случае инлайн переменных новый компилятор таки умеет использовать типы без их определения в uses.
19 май 20, 03:16    [22135451]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить