PDA

View Full Version : حرفه ای: ساخت اشیا در دلفی



Delphi 2010
یک شنبه 07 مهر 1392, 20:07 عصر
به عرض سلام خدمت دوستان و سروران گرامی
تفاوت این دو تا کد از لحاظ فنی و تخصصی توی چی هست؟
هر دو کد درست عمل میکنند و اشیا رو می سازن
کد اول:

Frame := TF_Frame1.Create(Self);
Frame.Parent := TabSheet;
Frame.Visible := True;
Frame.Name := 'Tab1';
Frame.Align := alClient;

کد دوم:

TWinControl(Frame) := TF_Frame1.Create(Self);
TWinControl(Frame).Parent := TabSheet;
TWinControl(Frame).Visible := True;
TWinControl(Frame).Name := 'Tab1';
TWinControl(Frame).Align := alClient;

یوسف زالی
یک شنبه 07 مهر 1392, 23:40 عصر
سلام.
این بر می گرده به مفهوم وراثت و پولی مورفیسم.
در حقیقت دارید یک شی رو تبدیل زوری (force) می کنید به کلاسی که دوست دارید.
این تبدیل در حالتی که به کلاس های پدر انجام بشه (مثال شما) هیچ توفیری به حال نتیجه نداره، در حقیقت حتی پراپرتی ها رو هم دارید از دست می دید، ولی در مواقعی که به کلاس های فرزند تبدیل بشه، خیلی پرکاربرد می شه.
البته استثنائاتی هم وجود داره، مثل وقتی که متدها کال می شند.
مثالش Sender در رویداد های TNotifyEvent (مثل کلیک دکمه) هست.
وقتی رویداد های کلیک دکمه و Change ادیت رو هردو به یک متد نسبت بدید، می تونید با چک کردن شرط، تبدیل اجباری رو انجام بدید:


if Sender is TButton then
TButton(Sender).Caption := 'SomeThing'
else if Sender is TEdit then
TEdit(Sender).Text := 'SomeThingElse'

firststep
دوشنبه 08 مهر 1392, 08:50 صبح
در شماره 1 در حقیقت این شکل است::::

var
Frame:TF_Frame1
begin
Frame := TF_Frame1.Create(Self);
Frame.Parent := TabSheet;
Frame.Visible := True;
Frame.Name := 'Tab1';
Frame.Align := alClient;

end


در شماره 2 داستان به این شکل است در حقیقت



function name_func(Frame:tobject)
begin
TWinControl(Frame) := TF_Frame1.Create(Self);
TWinControl(Frame).Parent := TabSheet;
TWinControl(Frame).Visible := True;
TWinControl(Frame).Name := 'Tab1';
TWinControl(Frame).Align := alClient;
end;





در حالت دوم همان طور که می بینید شی متغیر فریم از نوع tobject تعریف شده یعنی پایه ترید کلاس در دلفی
این درواقه به این معنی می شود که شما هر نوع متغیر با هر نوع کلاس به عنوان ورودی و به جای فریم می تونه قرار بگیره
TWinControl(Frame) و این عبارت نشان می ده که با Frame مانند TWinControl (پایه کلاس ها کنترل ها ) رفتار کنه
به این روش می گن
type casting
و فکر می کنم تنها تفاوت ها در همین بود