سلام
توابع constructor و destructor چه توابعي هستند و هر كدام د ركجا كاربرد دارند؟
اگر لطف كنيد با مثال يه نمونه نشونم بديد ممنونتون مي شم؟
Printable View
سلام
توابع constructor و destructor چه توابعي هستند و هر كدام د ركجا كاربرد دارند؟
اگر لطف كنيد با مثال يه نمونه نشونم بديد ممنونتون مي شم؟
constructor در oop به عنوان سازنده استفاده ميشه
deconstructor هم براي زماني كه احتياج به اصلاح پيدا ميكنه
ممكنه بيشتر توضيح بديد؟نقل قول:
constructor در oop به عنوان سازنده استفاده ميشه
deconstructor هم براي زماني كه احتياج به اصلاح پيدا ميكنه
سلام
تابع constructor اولین تابع یک کلاس است که اجرا خواهد شد و خودکار در طی عملیات نمونه سازی ان کلاس که معمولاً در زبانهای مختلف با فرمان new انجام میشود فراخوانی میشود و درست بعد از پر کردن اشاره گر کلاس (this در خانواده C و Me در خانواده VB) میتوان کدهای مورد نیاز خودمان را اجرا کنیم.
تعریف یک تابع سازنده میتواند چیزی شبیه این باشد:
خلاصه:کد:VC++.Net
public ref class Class1
{
public: Class1()
{
...
}
C#.Net
public class Class1
{
public Class1()
{
...
}
VB.Net
Public Class Class1
Public Sub New()
...
End Sub
J#.Net
public class Class1
{
public Class1()
{
...
}
Delphi.Net
public Class1
constructor Class1.Create();
begin
...
end;
این تابع اولین تابع است که در زمان ساخت کلاس فقط و فقط و اجباراً یکبار اجرا میشود.
در این تابع میتوانید اشیا و مقادیر مورد نیاز برای کلاس را مقدار دهی کنید.
=====
تابع destructor بر عکس مورد قبلی است و تابعی است که قبل از پاک سازی کلاس از حافظه اجرا میشود.
تابع destructor در زبانهای برنامه نویسی و محیط های مختلف آن قطعیت constructor را ندارد.
یعنی شاید چند بار اجرا شود و برخی محیطها امکان اندکی هم دارد اصلاً اجرا نشود !
تعریف یک تابع خاتمه یا نابود کننده، میتواند چیزی شبیه این باشد:
کد:VC++.Net
public ref class Class1
{
!Class1()
{
...
}
C#.Net
public class Class1
{
~Class1()
{
...
}
VB.Net
Public Class Class1
Protected Overrides Sub Finalize()
Try
...
Finally
MyBase.Finalize()
End Try
End Sub
J#.Net
public class Class1
{
~Class1()
{
...
}
Delphi.Net
public Class1
procedure Class1.Finalize;
begin
try
...
finally
inherited Finalize
end
end;
البته لازم به ذکر است که زبانهای تحت دات نت ...
- معمولاً نیازی به کدنویسی نابود کننده خود کلاسها به صورت فوق نیست و مسئولیت پاک سازی با سرویس CLR "جمع آوری کننده حافظه هرز" است.
- نابود کننده خاص قویتری با اصول شی گرایی وجود دارد که با پیاده سازی واسط IDisposable قابل تعریف است.
خلاصه:
این تابع در زمان پاک شدن و نابود شدن کلاس فراخوانی میشود و میتوان در صورت لزوم منابع استفاده شده را آزادسازی کرد.
موفق باشید.
بازم معرفت شما h2 جان
ممنونتم.... عالي بود