الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

بعض المفاهيم في .NET

مغلق
بدأه تمام كوجان في 5 أغسطس 2006 · 2 رد · 1,225 مشاهدة · في برمجة الأجهزة الكفية والمحمولة بالدوت نيت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

اشتريت مؤخرا كتابا يتحدث عن برمجة .NET Compact Framework , و بدأت القراءة فيه

و كان الجزء الأول من الكتاب يتحدث عن مفاهيم .NET Framework و ألية عمله و تصميمه

بعض مميزات المترجمات للغات الدوت نت

سأحاول أن أشارككم ببعض النقاط المهمة من هذا الكتاب

private void SayHello()
{
   string str1 = "Hello";
   StringBuilder sb1 = new StringBuilder("Hello");
   MessageBox.Show("Hello", "Hello");
}

في المثال السابق نلاحظ أن كلمة Hello قد تكررت أربع مرات فهل يتم حفظ أربع كلمات Hello

في التطبيق الذي أنشأناه , فعليا لا يتم ذلك بل يقوم المترجم بإضافة اربع مؤشرات تدل لعبارة Hello واحدة

و بالتالي سيكون حجم الملف التنفيذي أصغر مما كان ممكنا أن يكون

اللهم صل و سلم على سيدنا محمد

كاف و نون خلقهم و فنائهم كاف و نون

عالمي شاشة و لغتي صفر و واحد

Just Smile ............You can do it

When you stop learning ... You stop leading

لساني بنطقي صامت عنه عادل............وقلبي بصمتي ضاحك منه هازل

وأتـعـب من نـاداك من لا تـجيبـه............وأغـيظ من عـاداك من لا تـشاكـل

مدونتي الشخصية : Tammam Koujan

آخر مواضيع المدونة :

#2

السلام عليكم

هذا جزء من ما يقوم به الـGarbage collector, وهذه الميزة موجودة أيضا فى الجافا و لكن طبعا الجافا سابقة فى هذا الموضوع لان هذه الفكرة كانت نت أساسيات أنطلاق الجافا

و هناك الكثير من التحسينات التى كان يعاني منها المطورون قديما لتطوير التطبيقات من ناحية أدارة الذاكرة و العمليات و التى كانت تؤثر بشكل كبير جدا على الاداء الخاص بالتطبيق

Nothing to mention except that I am Muslim

Using your brain is not bad as you think

My Blog

logo.jpg

#3
اقتباس
هذا جزء من ما يقوم به الـGarbage collector

بالاحرى هذا جزء مما يقوم به الـ compiler

ومن ثم يأتي دورالـGarbage collector في ادارة الذاكرة حيث يقوم بإزالة اي سلسلة نصية لم تعد تستخدم

لأن السلاسل النصية تستهلك كما كبيرا من الذاكرة و قد سهل الـ.NET التعامل معها بشكل كبير

اقتباس
وهذه الميزة موجودة أيضا فى الجافا

كل اللغات خير و بركة

اذا رأى احد الجافاويين هذه العبارة سيدخل و يقول ها انتم تعترفون بأن الـ.NET سرق

معظم ميزاته من الجافا و سنرد عليه ان الجافا بالأصل اعتمدت على C++ و ندخل في حيص بيص

و ندخل كما تعودنا في معارك بين انصار الطرف الاول و الطرف الثاني :wacko:

الان نكمل قليلا

سنتحدث عن الانواع القياسية للبيانات في .NET :

هناك نوعان قياسيان :

Value Types : و هي انواع بسيطة معدة لتخزن بيانات مجردة

أمثلة على Value Types :

Integers

Floating-point numbers

Data structures

Enumerations

الهدف من Value Types ان تكون صغيرة و سريعة , و عندما تستخدم كمتحولات محلية

فإنها تتوضع في المكدس Stack , و عندما تحتوى في object فإنها تمثل على شكل stream بسيط من البايتات

كل الـ value types تتفرع عن صنف اساسي هو System.ValueType

و هذا الصنف يتفرع بدوره عن System.Object

الـ value types لها محدودياتها أيضا , فبينما تعرف على أنها أصناف .NET , فإنها بحد

ذاتها تعتبر أصنافا مغلقة , أو بعبارة أخرى لا يمكنك ان تستخدم System.Int32 (او اي value-type class أخر)

كصنف رئيسي (base class ) لأنواع أخرى

ايضا المتحولات من نوع value-type يجب ان تحتوي دوما على قيمة ما و يجب ألا تكون فارغة

Reference Types

أغراض الـ Reference Types يمكن الوصول لها في زمن التنفيذ باستخدام مرجع (Reference )

هو مؤشر للغرض بحد ذاته .

أمثلة على reference types :

Objects created from a class

Objects encapsulating Win32 system objects (forms, controls, graphic objects, threads, mutexes, files, and so on)

Arrays

Strings

كل غرض (object ) يمتلك ترويسة غرض قياسية (standard object header)

حجم ترويسة الغرض هو 8 بايت

و الحجم لأصغر غرض ممكن هو 12 بايت

و بالتالي فإن reference types تأخذ مساحة أكبر مما تأخذه value types

Reference types تمتلك دعما تاما للبرمجة غرضية التوجه

و من اكثر ميزاتها فائدة هي الوراثة , كما بمكن ان تكون قيمتها null

النقطة التي اريد التركيز عليها هي التالية :

استخدام Value Types و Reference types كمتحولات

Value Types يمكن ان تمرر بالقيمة او بالمرجع

عندما تمررها بالقيمة فإن نسخة من قيمة المتحول توضع في المكدس (stack)

و بالتالي فن الدالة المستدعية ستتعامل مع نسخة من المتحول و لن تؤثر على قيمة المتحول الأصلية

أما عندما تمررها بالمرجع فإنه يتم وضع مؤشر في المكدس يشير إلى القيمة

و الدالة التي تستدعي المتحول تستطيع ان تغير قيمته

فكرة التمرير بالقيمة و المرجع فكرة معروفة لكثيرين لكن ليس هذا بيت القصيد اكملوا معي

المتحول من نوع reference-type يحتوي على مؤشر يشير للغرض

هنا قد يحصل بعض الارباك

هناك نوعان Value Types و reference-type و هناك طريقتان لتمرير المتحولات

بالقيمة (Value ) و بالمرجع (reference)

لذا قد تكون توقعت انه يجب ان نمرر Value Types بالقيمة (Value ) و reference-type بالمرجع (reference) ؟

الـ Value Types كما ذكرنا تمرر بالقيمة و بالمرجع

أما الـ reference-type فتمرر على نحو مألوف عادة بالقيمة و ليس بالمرجع

السبب هو ان قيمة الـ reference-type هي عبارة عن مؤشر , و بالتالي قيمتها هي القيمة نفسها التي تمرر بين الدوال (و ليس نسخة عنها)

من دون شك يمكنك ان تمرر reference-type بالمرجع لكن هذا يؤدي إلى الحصول على مؤشر لمؤشر , و هذا ما يحص نادرا

و هذه الامكانية تحدث لحالات قليلة كبعض الاستدعاءات لـnative code عند الحاجة

اللهم صل و سلم على سيدنا محمد

كاف و نون خلقهم و فنائهم كاف و نون

عالمي شاشة و لغتي صفر و واحد

Just Smile ............You can do it

When you stop learning ... You stop leading

لساني بنطقي صامت عنه عادل............وقلبي بصمتي ضاحك منه هازل

وأتـعـب من نـاداك من لا تـجيبـه............وأغـيظ من عـاداك من لا تـشاكـل

مدونتي الشخصية : Tammam Koujan

آخر مواضيع المدونة :

هذا الموضوع مغلق.

مواضيع مشابهة