المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : ما معنى كلمة Static وما هو المتغير الإستاتيكي في الدوت نيت !!



oms
03-02-2008, 11:44 AM
السلام عليكم ..

لربما مضى أكثر من سنه على مشاركتي في قسمي الحبيب الذي نلت شرف الإشراف عليه سابقاً ...

هنا وبسبب الطلب المتزايد على الموضوع وجب عل يأن أقوم بتوضيح هذه القضية .. فهي من أصعب بل من أكثر الأمور سؤالاً من جمهور المبرمجين الجدد ...

ما هو المتغير الإستاتيكي في بيشة الدوت نيت من اللغات المعروفة - السي شارب C#.net والفيجوال بيسك VB.net وغيرها ؟

فكثيراً ما نتعامل معه .. ولكننا نغفل عن التفكير بمعناه أو عن مدى إستخدامه .

الموضوع بسيط وأرجوا أن تخرج عزيزي القارئ بفهم كامل للموضوع بمجرد قراءتك له .

ببساطة يمكن تلخيص وظيفة المتغير الإستاتيكي بأنه مكان يتم تخزين القيم فيه على مستوى ال Class وهو غير قابل للإستنساخ ... مثال :



class MyClass
{
public static int x = 1;
public int y = 0;
public MyClass()
{
x++;
y++;
}
}


لاحظ أن هناك متغيرين في هذا الكلاس ... وهما x و y . فالأول من النوع الإستاتيكي ... والثاني من النوع العادي .. وكلاهما عام .. أي أنه يمكننا التعامل معهم من الخارج .

لو قمنا بأخذ Instance من الكلاس MyClass وأسميناه مثلاً .. Ins1 فإننا نستطيع التعامل مع المتغير y ولكننا لا نستطيع ذلك مع x والسبب أن المتغير x هو متغير إستاتيكي وهو حكر على الكلاس فقط ... ونستنتج من ذلك أن الجمل التالية :
- ins1.x = 5 خطأ .
- ins1.y = 5 صحيحة .
- MyClass.x = 5 صحيحة .
- MyClass.y = 5 خطأ .

يعني الستاتيك حكر على الكلاس ... والعادي حكر على ال Instance from class .

نخرج بخلاصة أن المتغير الستاتيكي هو أفضل مكان لخزن قيمة تحتاجها كل الإنستنس .. بحيث حتى ولو تم إنهاء ال Instance من الذاكرة .. فإن القيمة المشتركة لن تتغير أبداً .. بينما جميع المتغيرات العاية ستنتهي بإنتهاء حياه ال Instance . والمتغير الإستاتيكي سيعيش طول فترة البرنامج .. وما إن ننتهي منه سينتهي ..

مع ملاحظة أنه لا يمكنك إستخدام كلمة Static في ال Function التي تنشأها .

Argonaut
06-02-2008, 02:42 PM
و عليكم السلام
اووووه ( مفيد جدا ) ، كيف حالك أسامة ان شاء الله زين

shjoonal3in
06-02-2008, 09:12 PM
جميل جداً ...
أعتقد نفس الطريقة مع الـ static variable في الجافا ...نفس الفكرة ...!
حكر على الكلاس وليس على الاوبجكت ...



مع ملاحظة أنه لا يمكنك إستخدام كلمة Static في ال Function التي تنشأها .

لم أفهم قصدك بهذه الجملة ..!

شكراً ...

oms
06-02-2008, 09:44 PM
هلا بالمراقب الخفي .... ما بشوفك إلا كل 5 سنوات مرة ... :) ( طبعاً تقصير مني )

يا شجون العين ...
كلامك صحيح ... هو نفسه .

يعني :



class class1
{
static int y = 6;

static void main()
{
static int x = 5 ;
}
}


الجملة الخضراء صحيحة لأنها معرفة مباشرة في الكلاس ... أما الحمراء فهي داخل Method ... وهذا خطأ ..

shjoonal3in
06-02-2008, 10:05 PM
الجملة الخضراء صحيحة لأنها معرفة مباشرة في الكلاس ... أما الحمراء فهي داخل Method ... وهذا خطأ ..
رائع جداً ... رائع ... وضحت الفكرة ..!
شكراً جزييييلاً لك ...

oms
06-02-2008, 10:14 PM
شاكر مرورك :)

الشبح77
08-02-2008, 06:52 PM
اخي الغالي \ شكرا على جهودك الواضحة بارك الله فيك
ولكن لي تعقيب على تعريف STATIC
ال Static معروف كما درسناه انه متغير Variable لكن يحتفظ بقيمته بمعنى في حال الخروج من الاجراء
من خلال التعامل معه لا يفقد قيمته وتستطيع التعامل معه سواء على المستوى العام Public او في قاعدة IF أو حتى في Class .. تمنياتي للجميع بالتوفيق

من التراب
12-03-2008, 02:32 PM
تسلم على الدرس الخفيف ع البطن والمفيد للذهن ^..^
ستاتك أوبشن مفيده في البرمجة وتظهر فائدتها إذا كان الــmathod استاتك
فيعفينا من تصنيع أوبجكت للكلاس بينما يحقق عمله
فمثلا ..في الجافا:
يمكن تستخدم Mathod يحول المتغير الرقمي إلى نصي بدون خلق أي أوبجكت لأنه ماثود استاتسكي


تسلم على الدرس وسمحلي ع الإطاله

TeamFlex
13-03-2008, 09:16 AM
got it all
thanx