تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
توضيح دالة المهدمات
#6
ali.alfoly كتب :[b]جزاك الله خيرا وجعله فى موازين حسناتك

طيب ارجو توضيح بعض النقاط مش فاهمها

1 - ماهذا الامر او هذه الدالة

كود :
[color=#0000FF]MyBase[/color][color=#000000].Finalize()[/color]

ولماذا تم وضعها فى Try


كود :
[color=#0000FF]Protected[/color] [color=#0000FF]Overrides[/color] [color=#0000FF]Sub[/color][color=#000000] Finalize()[/color]
        [color=#0000FF]Try[/color]
[color=#000000]            counter -= 1[/color]
        [color=#0000FF]Finally[/color]
            [color=#0000FF]MyBase[/color][color=#000000].Finalize()[/color]
        [color=#0000FF]End[/color] [color=#0000FF]Try[/color]
    [color=#0000FF]End[/color] [color=#0000FF]Sub[/color]

2 - ما هذا الـ Try السابق الـ Try الذى اعرفه يكون بهذا الشكل

كود :
[color=#0000FF]Try[/color]


        [color=#0000FF]Catch[/color][color=#000000] ex [/color][color=#0000FF]As[/color] [color=#2B91AF]Exception[/color]


        [color=#0000FF]End[/color] [color=#0000FF]Try[/color]

3 - انا اعرف ان عمر المتغير ينتهى بانتهاء الاجراء الذى هو بداخله

فى الكود السابق لحدرتك فى المشاركة #4 انا قمت بالاعلان عن المتغير داخل Sub الخاص بـ Button3


كود :
[color=#0000FF]Private[/color] [color=#0000FF]Sub[/color][color=#000000] Button3_Click(sender [/color][color=#0000FF]As[/color] [color=#0000FF]Object[/color][color=#000000], e [/color][color=#0000FF]As[/color] [color=#2B91AF]EventArgs[/color][color=#000000]) [/color][color=#0000FF]Handles[/color][color=#000000] Button3.Click[/color]
        [color=#0000FF]Dim[/color][color=#000000] a [/color][color=#0000FF]As[/color] [color=#0000FF]New[/color] [color=#2B91AF]AAA[/color]
    [color=#0000FF]End[/color] [color=#0000FF]Sub[/color]

لماذا لم ينتهى بانتهاء الـ Sub بل انتهى بانتهاء الـ Class

انا اهنيك على إنشائك للموضوع اخي

فلو انك تجاهلت الامور الي مافهمتها راح تندم مستقبلا - عن تجربة

أي شي مو فاهمنه ضع له موضوع هنا كي تستفيد منه ويستفيد الاخرون منه (ولكن هذا لايعني ان لاتبحث عن الحل اولا)

لدينا مثل بالهجة البحرانية يقول :

"اسئل واسئل حتى يقول الناس عنك أهبل" ههههه


المهم ماعلينا
إن شاء الله السطور القادمة توضح لك الي مافهمته



--



1- Finalize هي الدالة المعاكسة للمشيد (Constructed)
المشيد هي دالة يتم اطلاقها عندما تقوم بإنشاء نسخة فئة باستعمال new

لاحظ معي :

PHP كود :
Public Class Form1

    
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load

        Dim cl 
As New AAA 'سيتم استدعاء المشيد لأننا قمنا بإنشاء كائن

    End Sub
End Class

Public Class AAA

    Public Sub New()
        '
دالة المشيد
        
'يتم استدعائها لحظة انشاء الكائن
    End Sub

End Class 

المثال السابق وضح لك المشيد



ولكن ماذا عن "المهدم" (Finalize) ؟

المهدم هي دالة يتم اطلاقها عندما يموت الكائن ولست انت من تحدد موعد موت الكائن بل هناك شيئ يدعى Garbage Collection
هي المسؤولة عن قتل الكائنات في الوقت المناسب


--


2[COLOR="#FF0000"]- try تستخدم لقنص الاخطاء وعدم توقف البرنامج عند حدوثها ، لاادري مالحالة التي تطلبت وضع try لإني لم أشاهد الكود كاملا

[/COLOR]
--

[COLOR="#FF0000"]
3- try - catch - finally هو التركيب الحقيقي لtry[/COLOR]
ولكن يمكن الاستغناء عن finally
والعكس صحيح ايضا (يمكن الاستغناء عن catch)

وتستعمل finally لتفيذ الكود الذي بداخلها سواء حدث خطأ او لم يحدث

بعكس catch التي تقوم بتفيذ الاكواد التي بداخلها إذا حصل خطا فقط


--


4- من الذي خدعك وقال لك ان الكائنات المرجعية تموت او (تنتهي حسب تعبيرك) بإنتهاء الإجراء (sub)

صحيح أنا لانكر ان الكائنات تموت بإنتهاء الاجراء ولكن هذا يحدث فقط للكائنات (ذات القيمة)

[COLOR="#2F4F4F"]الانواع المرجعية (Reference type) هي :
1- الفئات (class)
2- المصفوفات
3- النوع string
4- المفوضات[/COLOR]


[COLOR="#0000CD"]الانواع ذات القيمة (Value type) :
1- جميع انواع الارقام (integer , double , flout ...)
2-النوع boolean و char وايضا date
3-التراكيب (structures)
4- التراكيب من نوع Enumerations (بشرط ان تكون البيانات داخل التركيب من نوع value type المذكورة فوق)[/COLOR]

الحديث عن الفروقات بينهم فيه كلام شوي طويل

ولكن إختصارا :

الvalue type هو نوع يخزن قيمته في المكدسة حيث ان الكائن يشير الى قيمته مباشرة

PHP كود :
Dim a As Integer 'تشير الى الرقم 4 a 




اما الrefrance type هو نوع يخزن قيمته في مكان في الذاكرة يسمى Managed Heap حيث ان الكائن يشير إلى عنوان القيمة في الManaged heap

ضع الف خط تحت يشير إلى عنوان القيمة

شوف هذا المثال :

PHP كود :
Dim a As New AAA 'في الذاكرة AAA يشير إلى عنوان بيانات الفئة a 


-

نرجع لموضوعنا

فالانواع ذات القيمة (value type) تموت بنهاية الاجراء

PHP كود :
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load

        Dim num 
As Integer

    End Sub 
'سيموت المتغير num 

خلاص المتغير num سينهي الى الابد وسيذهب إلى الجحيم


بينما الانواع المرجعية لايتم حذفها بإنتهاء الاجراء . إنما يتم حذف مؤشر الكائن الذي يشير إلى بيانات الفئة

PHP كود :
Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles MyBase.Load

        Dim xax 
As New AAA

    End Sub 
'Managed heapولكن ستبقى بيانات الكائن في ال xax سيحذف المؤشر 


فعند نهاية الاجراء سيتم حذف المؤشر xax ولكن ستبقى بيانات الفئة AAA في ال Managed heap !!!!

قبل انتهاء الاجراء :




بعد انتهاء الاجراء :




ولهذا ترا ان الفئة لم تنتهي بإنتهاء الاجراء (يتم حذف مؤشر بياناتها فقط) إنما يتم حذف بيانات الفئة بواسطة Garbage Collection

حيث انها فئة في الدوت نت تقوم آليا بإدارة الكائنات وقتلها (حذفها) في الوقت المناسب

--
كما قلنا ان بيانات الفئة لاتنحذف بإنتهاء الاجراء
بل تقوم Garbage collection بحذفها آليا في الوقت المناسب
ولكن إن أردنا حذف البيانات يدويا
يمكننا طلب الدالة collect من ال Garbage collection
فهي تقوم بحذف جميع بيانات الفئات (او بيانات من نوع مرجعي) التي ليست لها مؤشر

PHP كود :
GC.Collect()
GC.WaitForPendingFinalizers() 


ملاحظة : GC يشير الى Garbage collection



--
--
--



اي استفسار اخر انا حاضر

تحياتي
[/b]
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
توضيح دالة المهدمات - بواسطة ali.alfoly - 25-08-13, 12:50 AM
توضيح دالة المهدمات - بواسطة 3booody - 25-08-13, 01:21 AM
توضيح دالة المهدمات - بواسطة ali.alfoly - 25-08-13, 01:29 AM
توضيح دالة المهدمات - بواسطة 3booody - 25-08-13, 01:42 AM
توضيح دالة المهدمات - بواسطة ali.alfoly - 25-08-13, 02:23 AM
توضيح دالة المهدمات - بواسطة الشاكي لله_mybb_import4784 - 25-08-13, 11:23 AM
توضيح دالة المهدمات - بواسطة 3booody - 25-08-13, 01:09 PM
توضيح دالة المهدمات - بواسطة ali.alfoly - 26-08-13, 03:43 AM
توضيح دالة المهدمات - بواسطة ali.alfoly - 26-08-13, 05:24 AM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم