![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ООП [D7, XP]
Гога © (2006-03-14 07:54:00)Здрасьсте!
У меня почему то не работает код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
type
C_ = class(TObject)
X: Word;
end;
C1 = class(C_)
Y: Word;
end;
C2 = class(C_)
Z: Word;
end;
C = class of C_;
var
TC: C;
TC1: C1;
TC2: C2;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
TC := TC2;
end;
end.
Кароче, мне нужно зделать, чтобы одной переменной мона было присваисвать все типы, наследуемые от C_. Как это зделать?
Спасибо!
Pearled (2006-03-14 12:30:00) [1]
> И не должно работать, потому что C и C2 несовместимые типы.
> А для того чтобы понять "почему", нужно начать читать книжку
> по программирование, раздел "Типы".
C - метакласс, естественно они несовместимы. Но переменная типа C может содержать ссылку на класс C_ или любой из его наследников.
Плохиш (2006-03-14 12:25:00) [2]
> Я имел в виду что переменной TC нужно присваивать не переменную
> класса C2, то есть как у автора - TC2, а сам класс, то есть
> C2. И никакой несовместимости нет. Аналогично будет работать:
>
> var
> c: TClass;
> ....
> c:= TButton;
Лучше жевать.
Pearled (2006-03-14 12:13:00) [3]
> > Переменная NC у тебя может содержать не объект, а класс.
>
>
> Мдя - вопрос, чем отличается класс от объекта подозреваешь?
>
Я имел в виду что переменной TC нужно присваивать не переменную класса C2, то есть как у автора - TC2, а сам класс, то есть C2. И никакой несовместимости нет. Аналогично будет работать:
var
c: TClass;
....
c:= TButton;
tesseract (2006-03-14 11:14:00) [4]
> Переменная NC у тебя может содержать не объект, а класс.
Мдя - вопрос, чем отличается класс от объекта подозреваешь?
Плохиш (2006-03-14 11:11:00) [5]
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> TC := TC2;
> end;
И не должно работать, потому что Cи C2несовместимые типы. А для того чтобы понять "почему", нужно начать читать книжку по программирование, раздел "Типы".
> Pearled © (14.03.06 08:44) [2]
Может почитаешь для начала чего?
tesseract (2006-03-14 11:08:00) [6]
> TC: C_;
Объект любого типа можно трактовать, как своего родителя.
Но вот родителя, как потомка трактовать не рекомендуется.
TC:=C(TC1); - пройдёт.
TC1:=C(TC1) - нет
Гаврила (2006-03-14 10:58:00) [7]в смысле это ответ был
не
var
TC: C;
а
var
TC: C_;
Гаврила (2006-03-14 10:57:00) [8]
>var
> TC: C _;
(ну и названия... ужас)
Ega23 (2006-03-14 09:01:00) [9]
> Как это зделать?
Для начала рекомендую приобрести и почитать Орфографический словарь.
Pearled (2006-03-14 08:44:00) [10]Переменная NC у тебя может содержать не объект, а класс. Поэтому вместо tc:= tc2 пиши tc:= c2;
Virgo_Style (2006-03-14 08:03:00) [11]в принципе, можно просто
C = TObject;