Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по экземплярам классов   Найти похожие ветки 

 
Антоныч   (2004-12-07 17:32) [0]

Помогите, возник такой вопрос.
Допустим, имеются 2 классa: Class1=class (TObject) и Class2=class (TObject) (различные).

Также имеется некоторая переменная MyObj – экземпляр класса в дальнейшем.
Для того, чтобы она стала экземпляром, необходимо произвести действия:
var MyObj: Class1;
...
MyObj:=Class1.Create;

Теперь MyObj – экземпляр класса Class1. Аналогично и для Class2.

Так вот, вопрос в следующем: можно ли сделать так, чтоб в процессе выполнения программы (например, на этапе создания формы), переменная MyObj становилась бы экземпляром класса либо Class1, либо Class2 (в зависимости от некоторого условия). Вообще, у меня вся загвоздка в том, какого типа её объявить в разделе var.

Заранее благодарен за содержательные ответы.


 
Александр Иванов ©   (2004-12-07 17:36) [1]

TObject, тогда ее можно использовать и так и так.


 
Антоныч   (2004-12-07 18:01) [2]

попробовал, тогда почему-то не видит полей, методов и свойств класса.

Class1=class(TObject)
 private
   FMarka: string;
   function GetMarka: string;
   procedure SetMarka(const Value: string);
 published
   constructor create;
   destructor destroy; override;
   property Marka: string read GetMarka write SetMarka;
 end;

var
 Form1: TForm1;
 MyObj: TObject;

implementation

constructor Class1.create;
begin
 inherited;
end;

destructor Class1.destroy;
begin
 destroy;
end;

function Class1.GetMarka: string;
begin
 Result:=FMarka;
end;

procedure Class1.SetMarka(const Value: string);
begin
 FMarka:=Value;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 MyObj:=Class1.create;
 MyObj.Marka:="121";
end;

Marka - Undeclared identifier   :(((


 
Рамиль ©   (2004-12-07 18:05) [3]


>procedure TForm1.FormCreate(Sender: TObject);
>begin
> MyObj:=Class1.create;
> MyObj.Marka:="121";
> end;


TClass1(MyObj).Marka:="121


 
Александр Иванов ©   (2004-12-07 18:12) [4]

(MyObj as Class1).Marka:="fdsfdfg";


 
MBo ©   (2004-12-07 18:14) [5]

Создай общего родителя, обладающего полями и методами, общими для обоих классов-наследников.
И обязательно почитай о ПОЛИМОРФИЗМЕ


 
Антоныч   (2004-12-07 18:30) [6]

2 Александр Иванов:
Так работает, но все-равно не пойдет. Мне при каждом обращении к методам класса надо явно указывать, экземпляр какого класса MyObj:
(MyObj as Class1).Marka:="fdsfdfg";
необходимо один раз однозначно соотнести, чтоб затем в программе просто обращаться: MyObj.Marka:="121";

2 MBo:
Создать общего родителя - можно, но мне переделывать всю прогу придется полностью, а она и так неслабая :)).
Про полиморфизм читал, знаю и использую, но как-то не пойму, где его здесь можно употребить. Может, не до конца уловил суть :).


 
MBo ©   (2004-12-07 18:46) [7]

type
 TMan=class
   function Name:string;virtual;abstract;
 end;

 TVasya=class(TMan)
   function Name:string;override;
 end;

 TPetya=class(TMan)
   function Name:string;override;
 end;

implementation

procedure TForm1.Button1Click(Sender: TObject);
var
 Man:TMan;
begin
 if Odd(GetTickCount) then
   Man:=TVasya.Create
 else
   Man:=TPetya.Create;

 Caption:=Man.Name;

 Man.Free;
end;

{ TPetya }

function TPetya.Name: string;
begin
 Result:="Petya";
end;

{ TVasya }

function TVasya.Name: string;
begin
 Result:="Vasya";
end;



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

Форум: "Основная";
Текущий архив: 2004.12.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.042 c
3-1100784403
Bless
2004-11-18 16:26
2004.12.19
события в MSSQL


8-1095743439
DelphiN!
2004-09-21 09:10
2004.12.19
Компонент для перетикания изображения


3-1100534722
Ivan_
2004-11-15 19:05
2004.12.19
Ошибка в TIBQuery


4-1099436174
Nix
2004-11-03 01:56
2004.12.19
Координаты мыши в "чужом" приложении.


1-1101913844
Суслик
2004-12-01 18:10
2004.12.19
Руссификация MessageDlg





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский