Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.26;
Скачать: CL | DM;

Вниз

ООП   Найти похожие ветки 

 
Гога   (2006-03-14 07:54) [0]

Здрасьсте!
У меня почему то не работает код:

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_. Как это зделать?

Спасибо!


 
Virgo_Style ©   (2006-03-14 08:03) [1]

в принципе, можно просто C = TObject;


 
Pearled ©   (2006-03-14 08:44) [2]

Переменная NC у тебя может содержать не объект, а класс. Поэтому вместо tc:= tc2 пиши tc:= c2;


 
Ega23 ©   (2006-03-14 09:01) [3]


> Как это зделать?


Для начала рекомендую приобрести и почитать Орфографический словарь.


 
Гаврила ©   (2006-03-14 10:57) [4]


>var
>  TC: C_;

(ну и названия... ужас)


 
Гаврила ©   (2006-03-14 10:58) [5]

в смысле это ответ был
не
var
 TC: C;
а
var
 TC: C_;


 
tesseract ©   (2006-03-14 11:08) [6]


>  TC: C_;

Объект любого типа можно трактовать, как своего родителя.
Но вот родителя, как потомка трактовать не рекомендуется.
TC:=C(TC1); - пройдёт.
TC1:=C(TC1) - нет


 
Плохиш ©   (2006-03-14 11:11) [7]


> procedure TForm1.FormCreate(Sender: TObject);
> begin
>  TC := TC2;
> end;

И не должно работать, потому что C и C2 несовместимые типы. А для того чтобы понять "почему", нужно начать читать книжку по программирование, раздел "Типы".

> Pearled ©   (14.03.06 08:44) [2]

Может почитаешь для начала чего?


 
tesseract ©   (2006-03-14 11:14) [8]


> Переменная NC у тебя может содержать не объект, а класс.

Мдя - вопрос, чем отличается класс от объекта подозреваешь?


 
Pearled ©   (2006-03-14 12:13) [9]


> > Переменная NC у тебя может содержать не объект, а класс.
>
>
> Мдя - вопрос, чем отличается класс от объекта подозреваешь?
>


Я имел в виду что переменной TC нужно присваивать не переменную класса C2, то есть как у автора - TC2, а сам класс, то есть C2. И никакой несовместимости нет. Аналогично будет работать:
var
  c: TClass;
....
c:= TButton;


 
Плохиш ©   (2006-03-14 12:25) [10]


> Я имел в виду что переменной TC нужно присваивать не переменную
> класса C2, то есть как у автора - TC2, а сам класс, то есть
> C2. И никакой несовместимости нет. Аналогично будет работать:
>
> var
>   c: TClass;
> ....
> c:= TButton;

Лучше жевать.


 
Pearled ©   (2006-03-14 12:30) [11]


> И не должно работать, потому что C и C2 несовместимые типы.
>  А для того чтобы понять "почему", нужно начать читать книжку
> по программирование, раздел "Типы".

C - метакласс, естественно они несовместимы. Но переменная типа C может содержать ссылку на класс C_ или любой из его наследников.



Страницы: 1 вся ветка

Текущий архив: 2006.03.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.026 c
15-1141655767
nightwalker
2006-03-06 17:36
2006.03.26
VB.NET vs. Delphi


15-1141363177
MBo
2006-03-03 08:19
2006.03.26
Пятничные задачки, в основном простенькие


5-1127897094
voe
2005-09-28 12:44
2006.03.26
Подскажите компонент


3-1138806707
Serg2103
2006-02-01 18:11
2006.03.26
SCOPE_IDENTITY() не всегда корректно выполняется


15-1141335676
Piter
2006-03-03 00:41
2006.03.26
Хех... загадка :)