powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Generics, как объявлять класс-потомок от заданного T?
42 сообщений из 42, показаны все 2 страниц
Generics, как объявлять класс-потомок от заданного T?
    #39986547
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброй ночи!

Кто хорошо разбирается в дженериках?


Хотеть сделать такое:
Код: pascal
1.
type TMyType<T> = class(T)

А оно мне такое:
[dcc32 Error] E2021 Class type requiredАга, думаю, ну да, я ж ему не указал что под "T" могут быть только классы... Как оно там пишется...
Код: pascal
1.
type TMyType<T: class> = class(T)

Теперь под "T" может быть задан только класс. Но оно мне всё равно такое же:
[dcc32 Error] E2021 Class type requiredТак, думаю, какой там ещё вариант был, вроде конкретный класс указать (типа под "T" могут быть только его потомки)?
Код: pascal
1.
type TMyType<T: TObject> = class(T)

А вообще хрен:
[dcc32 Error] E2510 Type 'TObject' is not a valid constraintНельзя самый базовый? Ачёйта? Странно... Ну ок, скопируем для начала как в примере из доков:
Код: pascal
1.
type TMyType<T: TComponent> = class(T)

Вот уже с TComponent пускает, но в правой части возвратилося:
[dcc32 Error] E2021 Class type required

Ну и что за чушь? Я же явно прописал, что "T" это будет класс. Что же ему не так? Как-то можно обойти?

Спасибо!
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986554
Нужно что бы класс поддерживал дженерики типа TList и тогда ты сможешь написать

Код: pascal
1.
2.
3.
4.
5.
6.
    , Generics.Collections;

type

  TMyType<T> = class(TList<T>)
  end;




Код: pascal
1.
  TList<T> = class(TEnumerable<T>)
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986580
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вопрос-то в чём?
переформулируй что ты хочешь получить
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986582
Cobalt747,

java насмотрелся где есть extends \ super
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986585
Почему то всё заработало, решил попробовать Чё это оно не работает

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
  TTest<T: TForm1> = class(TObjectDictionary<string, T>)
    procedure Test;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TTest<T>.Test;
begin

end;
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986604
Uridian
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
  TTest<T: TForm1> = class(TObjectDictionary<string, T>)

  procedure TTest<T>.Test;


Здесь "TTest<T>.Test" какое Т имеется в виду, это: "<T: TForm1>" или это "<string, T>"?
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986609
Uridian,

Второго. То есть если упростить

Код: pascal
1.
TTest<T: TObject> = class(TObjectDictionary<string, T>)



То мы задаём, что можно создать генерик только из классов, в которых входит предок TObject
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986642
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747
переформулируй что ты хочешь получить
Он хочет отнаследоваться от Generic типа

ResourceSpace,

Код: pascal
1.
TMyHelper = class helper for TObject

не спасет ОРД?
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986692
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВсеРазумный, спасибо за ответы!
Код: pascal
1.
TTest<T: TForm1> = class(TObjectDictionary<string, T>)

Так пропускает, да, но тогда оно не является потомком TForm1.
Код: pascal
1.
TTest<T: TObject> = class(TObjectDictionary<string, T>)

Я понимаю что вы просто для примера отредактировали предыдущий код, но как я уже писал в первом посте, именно такое уже чё-то не компилится. :)
[dcc32 Error] E2510 Type 'TObject' is not a valid constraint
_Vasilisk_, хелперы я знаю, но увы не подходят. Во-первых хелпер же у класса может быть только один. А во-вторых мне-таки нужны поля (в том числе типа "T").


Мне нужно чтоб получился именно потомок от "T", чтоб всякие "is" и "as" это подтверждали.

Технически он ругается только на то что "T" по его мнению всё ещё может оказаться не классом.
Как бы ему втолковать-то, что "всё ok, это точно класс"?
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986743
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace,

Никак...
Нельзя наследоваться от неизвестно чего.

Когда мы говорим о
Код: pascal
1.
2.
3.
type
  TMyType<T> = class
  end;



Предполагается, что Т - это какой то неизвестный тип, который используется внутри класса.

Код: pascal
1.
2.
3.
4.
5.
TMyType<T> = class
private
  FOne: T;
  FTwo: TList<T>;
end;



То что вы хотите, даже не понятно как представить...

Какова ваша цель?
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986770
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
хелпер же у класса может быть только один.
хелперы можно наследовать друг от друга
ResourceSpace
А во-вторых мне-таки нужны поля
Использовать какой-нибудь Tag для объекта-контейнера
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986799
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite

Предполагается, что Т - это какой то неизвестный тип, который используется внутри класса.

Код: pascal
1.
2.
3.
4.
5.
TMyType<T> = class
private
  FOne: T;
  FTwo: TList<T>;
end;



Какова ваша цель?


Предполагаю что он хочет расширить возможности TMyType<T> через наследование, но при этом ограничить T только классами.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986805
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
TMyType<T: class> = class
end;

TNewType<T: class> = class(TMyType<T>)
end;

TOtherType<T: class> = class(TNewType<T>)
end;


Это?
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986825
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite
Нельзя наследоваться от неизвестно чего.
X-Cite
Предполагается, что Т - это какой то неизвестный тип, который используется внутри класса.
alekcvp
... , но при этом ограничить T только классами.

Перечитываю документацию, и там есть такой раздел как "Generics Constraints".
Так что я уже ограничил "T" только классами - так что хотя это всё ещё и "неизвестно чего", но уже "точно класс".
Только вот конструкция "class(T)" почему-то осталась просто не в курсе ограничения "<T: class>".

_Vasilisk_
хелперы можно наследовать друг от друга
хм? Не встречал подобного, не подскажете где такое можно увидеть?
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986827
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace,

В справке
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Class_and_Record_Helpers_(Delphi)

авторThe syntax for declaring a class helper is:
type
identifierName = class|record helper [(ancestor list)] for TypeIdentifierName
memberList
end;

The ancestor list is optional. It can be specified only for class helper.


Код: pascal
1.
2.
3.
4.
5.
  TMyHelper = class helper for TObject
  end;

  TNewHelper = class helper(TMyHelper) for TObject
  end;
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986870
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
alekcvp,
Код: pascal
1.
2.
TNewType<T: class> = class(TMyType<T>)
end;


Это?

Думаю это.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986872
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986881
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
о... Так вот что/зачем такое "ancestor list"...)))))
Описание конечно супер: "Не является обязательным. Может указываться только для хелперов."
Класс!) Вроде работает)))
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986883
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правда возникает вопрос: а как узнать имя ancestor'а если это не наш же, а какой-нибудь чужой (например системный) хэлпер - они как предлагают узнавать его имя..?

alekcvp
Думаю это.
Не-а. Наследник самого "T" нада, а не наследник списка/словаря из "T" или подобного.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39986887
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поспешил... Работает, но тока для "class", а вот для "record":
Код: pascal
1.
2.
3.
4.
5.
  TMyHelper = record helper for String // или Int64Rec
  end;

  TNewHelper = record helper(TMyHelper) for String // или Int64Rec
  end;

Чё-то уже хрен вам:
[dcc32 Error] E2029 ',' or ':' expected but '(' found
[dcc32 Error] E2029 ';' expected but 'FOR' found
[dcc32 Error] E2029 ',' or ':' expected but 'END' foundУ этого Эмберберо всё блин не слава богу... :D
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987040
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Правда возникает вопрос: а как узнать имя ancestor'а если это не наш же, а какой-нибудь чужой (например системный) хэлпер - они как предлагают узнавать его имя..?
Смотреть исходники
ResourceSpace
Поспешил... Работает, но тока для "class", а вот для "record":
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Class_and_Record_Helpers_(Delphi) The ancestor list is optional. It can be specified only for class helper.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987123
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
alekcvp
Думаю это.
Не-а. Наследник самого "T" нада, а не наследник списка/словаря из "T" или подобного.

Подозреваю что это нереально, т.к. получается класс с разными типами конструкторов, в зависимости от T.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987134
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace
Как-то можно обойти?

Можно радикально - сменить компилятор. Free Pascal так умеет.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987171
kapas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВсеРазумный,

Код: pascal
1.
2.
3.
4.
 
  TTest<T: TForm1> = class(TObjectDictionary<string, T>)
     procedure Test;
  end;



Здесь TTest - наследник TObjectDictionary, а в случае
Код: pascal
1.
 TMyType<T: TObject> = class(T)


некоторого, непонятно какого класса (тип которого еще требуется инстанцировать). И ошибка компиляции закономерна.

И это, по большому счету, сделано в Delphi разумно и правильно (в отличие от того что допустимо в FreePascal, см.:

Kazantsev Alexey
ResourceSpace
Как-то можно обойти?

Можно радикально - сменить компилятор. Free Pascal так умеет.
)

То что вы хотите как раз и позволяют сделать хелперы
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987177
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapas
То что вы хотите как раз и позволяют сделать хелперы

Хелперы в дельфях это хелперы курильщика (как и дженерики). Хелперы здорового человека, опять же, во Free Pascal.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987195
kapas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey,

Kazantsev AlexeyХелперы в дельфях это хелперы курильщика (как и дженерики). Хелперы здорового человека, опять же, во Free Pascal.

А поподробнее можно...?
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987198
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapas
А поподробнее можно...?

Хелпер в дельфях перекрывает собою любые другие, во Free Pascal они объединяются.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987205
kapas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey,
Наследование class helper'ов есть. Вполне себе хорошо работает. Об этом уже выше было сказано. Что касается record helper'ов - это так необходимо?

К тому же это в Delphi сделать возможно:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
type
  TRecordA = record helper for <ordinal> | record | array type;
  ...
  THelperRecordA = record helper for TRecordA
  ...
  end; 
  
  TRecordB = type TRecordA;

  THelperRecordB = record helper for TRecordB
    ...
     function Some();
  end; 

var
   A: TRecordA;
....
  THelperRecordB(A).Some();
  
  
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987211
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapas
Наследование class helper'ов есть

Речь не о наследовании. Один хелпер в одном модуле, другой в другом. Подключаем оба модуля...
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987217
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Речь не о наследовании. Один хелпер в одном модуле, другой в другом. Подключаем оба модуля...
Странный класс, к которому вынуждены лепить кучу хелперов...
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987219
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Создай тикет в ембаркадере. Проголосуем.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987222
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kapas
ошибка компиляции закономерна
Ошибка компиляции не закономерна, так как гласит не "что-то не так с разными типами конструкторов" - а "тут должен быть класс" , когда это как раз-таки и есть класс.
alekcvp
получается класс с разными типами конструкторов
И что? Когда я объявлю переменную конкретного типа и стану создавать объект этого конкретного типа - на этот момент всё будет уже чётко известно.
Kazantsev Alexey
Free Pascal так умеет.
Ха! Спасибо за информацию!
Проверил на 2.0.4 - хоть и аналогично ругается (плюс нафик ломаются выпадающие подсказки), но при этом при сборке спокойно компилирует и всё работает как задумывалось))
Красафчики, просто красафчики!) Всегда на шаг впереди))
_Vasilisk_
Смотреть исходники
Они, как бы, далеко не всегда доступны-то...
_Vasilisk_
...only for class helper...
Тьфу... Мой переводчик проглотил слово "class" и обратил в ничто... А я даже не заметил, сам балда) Спасибо что ткнули мордачкой)) :3

но... Но тогда это какая-то официальная лажа...
Допустим мне требуется свой хэлпер для String, при этом не повреждая системный TStringHelper...
И мне официально запрещают сделать??:
Код: pascal
1.
TMyStringHelper = record helper(TStringHelper) for String

Не говоря уже про несколько разных из разных модулей...
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987224
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
Странный класс, к которому вынуждены лепить кучу хелперов...

Ничего странного. Просто ситуации бывают разными.

rgreat
Создай тикет в ембаркадере.

А уже есть, вроде. Надо будет поискать.

ResourceSpace
Проверил на 2.0.4

Это же релиз 2006 года. Раритет, однако. Последний релиз 3.2.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987228
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ResourceSpace

alekcvp
получается класс с разными типами конструкторов
И что? Когда я объявлю переменную конкретного типа и стану создавать объект этого конкретного типа - на этот момент всё будет уже чётко известно.

Когда объявишь класс - да, а если ты объявишь процедуру, которая принимает твой класс и создаёт его динамически внутре - откуда компилятору узнать какой конструктор надо вызывать, сколько у него параметров и т.п.?..
Код: pascal
1.
2.
3.
4.
procedure InitMyClass(var MyClass: TObject; Base: TClass);
begin
  MyClass := TMyClass<Base>.Create; // ???!!!
end;
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987229
ResourceSpace
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kapas
сделать возможно

Долго писал пост, не видел этого сообщения. Сейчас изучим... Но выглядит больше как какой-то хак...
Kazantsev Alexey
Раритет, однако.

Не, это Lazarus'а версия, пардон что запутал. :) А сам FPC - 3.0.4.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987232
kapas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ResourceSpace,

1. ResourceSpaceОшибка компиляции не закономерна, так как гласит не "что-то не так с разными типами конструкторов" - а "тут должен быть класс", когда это как раз-таки и есть класс.

Подумайте лучше, что будет если то о чем здесь говорилось будет реализовано в языке: как вы будете, например, решать проблему с конфликтов имен методов, или рекурсией при определении класса (скажем вот так TClassA = class(TNewType<TClassA>)...end; // некоторые "разработчики" могут захотеть такой "красоты" :-)))

Я подозреваю что здесь еще существуют проблемы с реализацией такой конструкции в компиляторе...

2.

Код: pascal
1.
TMyStringHelper = record helper (TStringHelper) for String



Что мешает сделать как я писал выше:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
type
  TRecordA = record helper for <ordinal> | record | array type;
  ...
  THelperRecordA = record helper for TRecordA
  ...
  end; 
  
  TRecordB = type TRecordA;

  THelperRecordB = record helper for TRecordB
    ...
     function Some(): TOtherType;
  end; 

var
   A: TRecordA;
....
  AA := THelperRecordB(A).Some();



или нужно чтобы было красиво?
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987235
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
rgreat
Создай тикет в ембаркадере.

А уже есть, вроде. Надо будет поискать.

Нашёл, можно голосовать: https://quality.embarcadero.com/browse/RSP-13340
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987258
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Оказывается - уже.
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987267
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger
Kazantsev Alexey
Речь не о наследовании. Один хелпер в одном модуле, другой в другом. Подключаем оба модуля...
Странный класс, к которому вынуждены лепить кучу хелперов...


Если хелперы рассматривать как методы расширений, то самое то...

Есть какой нибудь TStream а к нему 150 фреймворков могут добавлять свои расширения, какие подключил, такие и получил возможности...
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987307
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
Есть какой нибудь TStream а к нему 150 фреймворков могут добавлять свои расширения, какие подключил, такие и получил возможности...
Хелпер - это костыль к базовому классу, когда его архитектура не позволяет ни по человечески реализовать функционал, ни нормально унаследоваться. Чем больше нужно костылей, тем кривее изначальная архитектура класса. С записями и простыми типами - более оправдано. Хотя я сам и для классов использую хелперы, но в основном чтобы достучаться до протектед методов без класс-аксессоров при разбиении на модули. Просто мы стараемся по возможности минимизировать список паблик методов в наших продуктах, а то такие фантазеры попадаются... И пока лично у меня не было нужды иметь более одного хелпера к классу
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987428
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger,

Я в аналогию привожу IServiceCollection в .Net Core
Ставишь какой-нибудь фреймворк а-ля Swagger
Добавляется .AddSwagger()
В котором уже инкапсулирован код регистрации в IServiceCollection...

В Delphi отличный пример для TFiled

Например лежит в базе какой-нибудь Блоб... Но ты знаешь четкую его структуру...
И вместо того чтобы писать AsStream и еще код по преобразованию в собственную модель, можно реализовать расширение(хелпер)
AsMyModel
И таких добавлений может быть сколько угодно много...
Например подключил работу с JPEG - появился AsJpeg
Подключил работу с RAW - появился AsRaw

Это же удобно..
...
Рейтинг: 0 / 0
Generics, как объявлять класс-потомок от заданного T?
    #39987701
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X-Cite
Это же удобно
Да ради бога. Я тоже использую когда нужно. Просто не было нужды в использовании сразу нескольких.
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Generics, как объявлять класс-потомок от заданного T?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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