|  | 
 
 | 
|  | 
| 
			 
			#1  
			
			
			
			
		 | |||
| 
 | |||
|  операция is всем привет)защищал лабу.препод дал вопрос,который,как мне казалось, я знал)в итоге отправил готовиться)спросил что такое is и зачем нужно.я ему ответил.он сказал,что еще существуют частные случаи.вот про них я и хотел бы узнать итак.предположим,что есть класс TA.от него наследуются классы TB и TС. Object1:TA; Object2:TB; Object3:TA; Object1:=TA.Create; Object2:=TB.Create; Object3:=TA.Create; что будут возвращать данные операции? Object1 is TA Object1 is TB Object1 is TC Object2 is TA Object2 is TB Object2 is TC Object3 is TA Object3 is TB Object3 is TC | 
| 
			 
			#2  
			
			
			
			
		 | ||||
| 
 | ||||
|   Код: type
  TA = class
  end;
  TB = class(TA)
  end;
  TC = class(TA)
  end;
var
  a: TA;
  b: TB;
  c: TC;
begin
  a:=TA.Create;
  b:=TB.Create;
  c:=TC.Create;
  if a is TA then Memo1.Lines.Add('a is TA');
  if b is TA then Memo1.Lines.Add('b is TA');
  if c is TA then Memo1.Lines.Add('c is TA');
  if a is TB then Memo1.Lines.Add('a is TB');
  if b is TB then Memo1.Lines.Add('b is TB');
//  if c is TB then Memo1.Lines.Add('c is TB');
  if a is TC then Memo1.Lines.Add('a is TC');
//  if b is TC then Memo1.Lines.Add('b is TC');
  if c is TC then Memo1.Lines.Add('c is TC');
  c.Free;
  b.Free;
  a.Free;
end;// потому что: Incompatible types: '<element>' and '<element>' или: Код: var
  a: TObject;
  b: TObject;
  c: TObject;
begin
  a:=TA.Create;
  b:=TB.Create;
  c:=TC.Create;
  if a is TA then Memo1.Lines.Add('a is TA');
  if b is TA then Memo1.Lines.Add('b is TA');
  if c is TA then Memo1.Lines.Add('c is TA');
  if a is TB then Memo1.Lines.Add('a is TB');
  if b is TB then Memo1.Lines.Add('b is TB');
  if c is TB then Memo1.Lines.Add('c is TB');
  if a is TC then Memo1.Lines.Add('a is TC');
  if b is TC then Memo1.Lines.Add('b is TC');
  if c is TC then Memo1.Lines.Add('c is TC');
  c.Free;
  b.Free;
  a.Free;
end;Цитата: 
  Последний раз редактировалось NumLock, 14.02.2011 в 13:12. | 
| 
			 
			#3  
			
			
			
			
		 | |||
| 
 | |||
|   а если у меня Object3 типа TA,то для него можно вызвать конструктор ТС? | 
| 
			 
			#4  
			
			
			
			
		 | ||||
| 
 | ||||
|   да, конечно: Код: TStringList = class(TStrings) var strings: TStrings; begin strings:=TStringList.Create; end; | 
| 
			 
			#5  
			
			
			
			
		 | |||
| 
 | |||
|   и все корректно сработает?) |