? class reference in Delphi
4 отговора
120 прегледа
? 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.
интересува ме какво е това псевдоним на клас в 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.
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
Разликата грубо казано:
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 на
Re: ? class reference in Delphi
Само кратко допълнение за ползването на конструкцията
От горния пример:
procedure Foo1(ItemClass: TCollectionItemClass);
в процедурата можеш дори да създаваш вкземпляри:
хItemClass=ItemClass.Креате (да й се невидяло на кирилицата - не ще да се изкл)
Така в Foo1 можеш да създаваш или TCollectionItem или негов наследник. Много е удобно.
От горния пример:
procedure Foo1(ItemClass: TCollectionItemClass);
в процедурата можеш дори да създаваш вкземпляри:
хItemClass=ItemClass.Креате (да й се невидяло на кирилицата - не ще да се изкл)
Така в Foo1 можеш да създаваш или TCollectionItem или негов наследник. Много е удобно.