? class reference in Delphi

4 отговора 120 прегледа
#1

? class reference in Delphi

Здравейте,
интересува ме какво е това псевдоним на клас в Delphi например:

type
TCollectionItemClass = class of TCollectionItem

Не е ли същото като конструкция в Borland Pascal:

type
^PCollectionItem = TCollectionItem
TCollectionItem = object(клас родител)
...
end;

var
TCollectionItemClass : PCollectionItem

т.е. псевдонимът на клас е указател към обект?

Ако няма нищо вярно в написаното по горе моля някой да ми обясни подробно
ако може, какво е това псевдоним на клас. Ако може да се приложи и някакъв пример,
за да видя нагледно как и за какво се използва.

И каква е разликата между :

TCollectionItemClass = class of TCollectionItem

и

TCollectionItemClass = class(TCollectionItem)

10 x thanks.

Отговор
в отговор на turtle #2

Re: ? class reference in Delphi

Погледни в Help-a на Delphi за "class of".

Разликата грубо казано:
TCollectionItemClass = class of TCollectionItem;
TCollectionItemDescendant = class(TCollectionItem);

procedure Foo1(ItemClass: TCollectionItemClass);
procedure Foo2(ItemDesc: TCollectionItemDescendant);

едната процедура ще я извикаш с
Foo1(TCollectionItemDescendant); // името на клас, наследник на TCollectionItem
другата
var Item: TCollectionItemDescendant;
Foo2(Item); // променлива от тип TCollectionItemDescendant

Редактирано от mn_t на

Отговор
в отговор на turtle #3

Re: ? class reference in Delphi

Само кратко допълнение за ползването на конструкцията
От горния пример:
procedure Foo1(ItemClass: TCollectionItemClass);
в процедурата можеш дори да създаваш вкземпляри:
хItemClass=ItemClass.Креате (да й се невидяло на кирилицата - не ще да се изкл)
Така в Foo1 можеш да създаваш или TCollectionItem или негов наследник. Много е удобно.

Отговор
в отговор на mn_t #4

Re: ? class reference in Delphi

Коя е аналогичната декларация в C++Builder?

Отговор
в отговор на turtle #5

Re: ? class reference in Delphi

Не мога да ти кажа. Не съм се занимавал с него.

Отговор