PDA

View Full Version : ساخت یه نمونه از کلاس



1485159
یک شنبه 26 اردیبهشت 1389, 20:23 عصر
سلام
من یه نمونه کلاس به صورت زیر تعریف میکنم:

x = class
constructor create;
end;حالا میخوام کلاس رو ایجاد کنم:

var
y: x;
begin
y.create;آیا این کد اشتباه؟ چرا؟
چه فرقی با:

y := x.create;داره؟

BORHAN TEC
یک شنبه 26 اردیبهشت 1389, 21:16 عصر
کد زیر درست است:

y := x.create;
ولی کد زیر درست نیستک

var
y: x;
begin
y.create;
چون در دلفی باید مشخص شود که این شی ای که قصد داریم آن را ایجاد کنیم از چه نوع کلاسی است. در بعضی از موارد می توان شی ای ساخت که اشاره گر یک شی به یک ساختار دیگر اشاره کند که این بحث و قواعد مربوط به آن در بحث پولی مورفیسم مطرح می شود. مثلاً ما می توانیم شی ای از کلاس TStrings بسازیم و اشاره گر آن را به کلاسی که از TStrings مشتق شده است نسبت دهیم (مثلاً TStringList). مانند مثال زیر :

procedure TForm4.Button1Click(Sender: TObject);
var
st: TStrings;
begin
st := TStringList.Create;
//...
end;

1485159
دوشنبه 27 اردیبهشت 1389, 11:43 صبح
خوب حالا فرض کنید که شی ای از کلاس x میخوام بسازم و اونو باز به کلاس x نسبت بدم. در اینصورت چطور؟ بازم نمیشه از y.create استفاده کنم؟
در ضمن من فکر میکنم تا وقتی که برای کلاسمون سازنده ای تعریف نکنیم نیازی به create کردن نیست! نه؟
در ضمن در مورد مخرب ها هم اگه میشه توضیح بدید.
ممنون.

vcldeveloper
چهارشنبه 29 اردیبهشت 1389, 20:30 عصر
خوب حالا فرض کنید که شی ای از کلاس x میخوام بسازم و اونو باز به کلاس x نسبت بدم.
شی را به کلاس نسبت نمیدند، بلکه شی نمونه ایی از یک کلاس هست، و قابل اختصاص دادن به یک شی دیگه هست، نه به یک کلاس!


در ضمن من فکر میکنم تا وقتی که برای کلاسمون سازنده ای تعریف نکنیم نیازی به create کردن نیست! نه؟
برای همه اشیاء در دلفی باید از Create استفاده کنید. حتی اگر خودتان هم برای کلاس تان متد سازنده ایی تعریف نکنید، همچنان کلاس شما یک متد سازنده پیش فرض خواهد داشت.


در ضمن در مورد مخرب ها هم اگه میشه توضیح بدید.
چه توضیحی؟

1485159
چهارشنبه 29 اردیبهشت 1389, 20:37 عصر
رای همه اشیاء در دلفی باید از Create استفاده کنید. حتی اگر خودتان هم برای کلاس تان متد سازنده ایی تعریف نکنید، همچنان کلاس شما یک متد سازنده پیش فرض خواهد داشت.
چرا؟ وقتی که create کردن کار خاصی انجام نمیده چه لزومی داره؟ یه کلاس خیلی ساده بسازید و بعد بنویسید: classname.create حالا کلید کنترل رو گرفته و روی create کلیک کنید!!!

vcldeveloper
چهارشنبه 29 اردیبهشت 1389, 21:10 عصر
چرا؟ وقتی که create کردن کار خاصی انجام نمیده چه لزومی داره؟
کی گفت کار خاصی انجام نمیده؟! حداقل کاربردش این هست که Create باعث میشه که حافظه مورد نیاز شی شما بهش اختصاص داده بشه.

1485159
چهارشنبه 29 اردیبهشت 1389, 21:19 عصر
کی گفت کار خاصی انجام نمیده؟! حداقل کاربردش این هست که Create باعث میشه که حافظه مورد نیاز شی شما بهش اختصاص داده بشه.

constructor TObject.Create;
begin
end;

vcldeveloper
پنج شنبه 30 اردیبهشت 1389, 01:37 صبح
constructor TObject.Create;
begin
end;

اون فقط متد Create از کلاس TObject هست. وقتی یک Constructor فراخوانی میشه، کامپایلرهای کدهای دیگه ایی پشت صحنه اضافه میکنه، مثل اجرای متد NewInstance.