Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизПодскажите пожалуйста по поводу модуля Menus Найти похожие ветки
← →
Dmitry_04 (2004-11-22 20:51) [0]Подскажите пожалуйста по поводу модуля Menus... Объясните почему в начале тип TMenuItem описан так:
type
TMenuItem = class;
а после описания нескольких других типов опятьже описан, только по другому:
TMenuItem = class(TComponent)
private
...
protected
...
public
...
published
...
end;
Как это понимать?
← →
GuAV © (2004-11-22 20:55) [1]If the declaration of a class type ends with the word class and a semicolon--that is, if it has the form
type className = class;
with no ancestor or class members listed after the word class--then it is a forward declaration. A forward declaration must be resolved by a defining declaration of the same class within the same type declaration section. In other words, between a forward declaration and its defining declaration, nothing can occur except other type declarations.
Forward declarations allow mutually dependent classes. For example,
type
TFigure = class; // forward declaration
TDrawing = class
Figure: TFigure;
...
end;
TFigure = class // defining declaration
Drawing: TDrawing;
...
end;
Do not confuse forward declarations with complete declarations of types that derive from TObject without declaring any class members.
type
TFirstClass = class; // this is a forward declaration
TSecondClass = class // this is a complete class declaration
end; //
TThirdClass = class(TObject); // this is a complete class declaration
← →
Dmitry_04 (2004-11-22 20:58) [2]GuAV Ты меня извени, я в английском не очень силен, объясни пожалуйста по русски
← →
Dmitry_04 (2004-11-22 21:17) [3]???
← →
begin...end © (2004-11-22 21:22) [4]
> [2] Dmitry_04 (22.11.04 20:58)
Я понимаю так... В пределах одной секции описания типов (секции type) можно сначала дать краткое опережающее описание, а потом - обычное полное. В том же модуле Menus объявленный кратко тип TMenuItem используется, например, в объявлении типа TMenuChangeEvent (несколькими строками ниже). Ну захотелось так разработчикам расположить эти объявления, - это их право...
А после этого даётся обычное объявление TMenuItem - с описанием полей, методов, свойств и т.д. Вот это и будет тип TMenuItem. А вначале он был кратко объявлен для того, чтобы указать, что такой класс вообще есть, чтобы его имя можно было указать в описании TMenuChangeEvent, а что это конкретно за TMenuItem, дорогой компилятор, - узнаешь позже... :-)
P.S. Но я могу заблуждаться...
← →
GuAV © (2004-11-22 21:32) [5]Dmitry_04 (22.11.04 20:58) [2]
Даже понимать английский особо не нужно просто рассмотри код в примере.
begin...end © (22.11.04 21:22) [4]
Всё вроде верно.
← →
begin...end © (2004-11-22 21:35) [6]
> [5] GuAV © (22.11.04 21:32)
> Даже понимать английский особо не нужно просто рассмотри
> код в примере.
Так этта... Код в примере - он ведь тоже... на английском... :-))
← →
Dmitry_04 (2004-11-22 21:44) [7]begin...end Может быть конечно... но почему бы тогда сразу его не описать какой он есть...:)
← →
GuAV © (2004-11-22 21:45) [8]Dmitry_04 (22.11.04 21:44) [7]
Может один класс использует другой а тот в свою очередь первый. Посмотри таки пример из справки в [1].
← →
Dmitry_04 (2004-11-22 22:10) [9]а может все намного проще? До объявления типа как:
TMenuItem = class(TComponent)
private
...
protected
...
public
...
published
...
end;
используется как:
type
TMenuItem = class;
Но можно ли объявлять по разному два одноименных типа?
← →
GuAV © (2004-11-22 23:13) [10]Dmitry_04 (22.11.04 22:10) [9]
Но можно ли объявлять по разному два одноименных типа?
Можно. Только тогда это будут два разных типа, даже если объявления будут совпадать.
Dmitry_04 (22.11.04 22:10) [9]
а может все намного проще?
Тогда как ???
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c