العودة   منتدى رياض الجنة - Riad Al-Ganah > الرياض التقنية > روضة الكورسات والدورات التقنية والعلمية > روضة دورات تقنية الـ .NET بلغاتها المختلفة > دورة .NET 2008 من منتدى فيجوال بيسك للعرب

دورة .NET 2008 من منتدى فيجوال بيسك للعرب مقدم الدورة : أحمد جمال ، نوع الدورة : كتابية مصحوبة بصور ، حالة الدورة : انتهت ، عدد الدروس : 80 درس . مستوى الدورة : من البداية للاحتراف .

إضافة رد

 
أدوات الموضوع انواع عرض الموضوع
  #1  
قديم 02-19-2010, 08:05 PM
الصورة الرمزية khaledbelal
khaledbelal khaledbelal غير متواجد حالياً
مبرمج المنتدى
الادارة تكليف لا تشريف
 
تاريخ التسجيل: Oct 2009
العمر: 34
المشاركات: 3,606
افتراضي الدرس الخامس عشر : التعرف على Static دورة .net 2008

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

لاحظنا في الدالة main الموجودة اساساً في البرنامج اننا نستخدم الكلمة static في ال C# أو Shared في ال VB.net ، فما معنى هذه الكلمة ؟

الكلمة static والتي يمكن استخدامها مع الدوال او الكلاس او حتى المتغيرات تعني ان هذا المتغير او الدالة يتم الوصول لها من على مستوى ال Class مباشرة وليس من مستوى ال object ، لنفترض المثال التالي الخاص ب Person :

C#:
كود PHP:
  class Person
  
{
      public 
string FirstName;
      public 
string LastName;
      public 
int Age;
      static public 
int counter;

VB.net:
كود PHP:
Class Person 
  
Public FirstName As String 
  
Public LastName As String 
  
Public Age As Integer 
 
  
Public Shared counter As Integer 
End 
Class 
ولنفترض اننا كتبنا الكود التالي مثلاً :

C#:
كود PHP:
Person MyEmpolyee = new Person();
MyEmpolyee.Age 15;
MyEmpolyee.counter 3
VB.net:
كود PHP:
Dim MyEmpolyee As New Person() 
MyEmpolyee.Age 15
MyEmpolyee
.counter 
للاسف لن يكون هذا الكود صحيحاً ، حيث ان counter هو متغير static ولذا تتم قراءته مباشرة على مستوى الكلاس بالشكل التالي :

C#:
كود PHP:
Person MyEmpolyee = new Person();
MyEmpolyee.Age 15;
Person.counter 3
VB.net:
كود PHP:
Dim MyEmpolyee As New Person() 
MyEmpolyee.Age 15;
Person.counter 3
لو قمنا بتعريف Object جديد من نفس الكلاس ، وقمنا بعرض قيمة ال counter الخاصة به من داخل الكلاس سنجد انها 3 مباشرة ، ذلك ان المتغير static يتم تعريف نسخة واحدة منه على مستوى الكلاس لجميع الكائنات object التي يتم عملها منه .

مثال على الاستفادة من هذه الخاصية هي خاصية العدادات ، والتي تقوم بعد الاوبجكتس التي ننشأها من هذا الكلاس ، سنضع الكود الاضفة في ال Constructor فيما نضع كود النقص في Destructor :

C#:
كود PHP:
class Person
{
public 
string FirstName;
public 
string LastName;
public 
int Age;
static public 
int counter;
public 
string getFullName()
{
return 
FirstName LastName;
}
public 
Person()
{
counter++;
}
~
Person()
{
counter--;
}

VB.net:

كود PHP:
Class Person 
كود PHP:
  Public FirstName As String 
  
Public LastName As String 
  
Public Age As Integer 
 
  
Public Shared counter As Integer 
 
  
Public Function getFullName() As String 
      
Return FirstName LastName 
  End 
Function 
 
  Public 
Sub New() 
      
counter += 
  End Sub 
  
Protected Overrides Sub Finalize() 
      Try 
 
          
counter -= 
      
Finally 
          
My****.Finalize() 
      
End Try 
  
End Sub 
End 
Class 
والآن سنقوم بانشاء عدد من الكائنات ، ومن ثم نقوم بعرض قيمة العداد :

C#:
كود PHP:
Person MyEmpolyee = new Person();
Person MyEmpolyee2 = new Person();
Person MyEmpolyee3 = new Person();
Person MyEmpolyee4 = new Person();
Person MyEmpolyee5 = new Person();
Console.WriteLine(Person.counter); 
VB.net:
كود PHP:
Dim MyEmpolyee As New Person() 
كود PHP:
Dim MyEmpolyee2 As New Person() 
Dim MyEmpolyee3 As New Person() 
Dim MyEmpolyee4 As New Person() 
Dim MyEmpolyee5 As New Person() 
Console.WriteLine(Person.counter
لو افترضنا الكود التالي :

c#:
كود PHP:
Person [] MyEmpolyee = new Person[5];
 
Console.WriteLine(Person.counter);
vb.net
كود PHP:
Dim MyEmpolyee As Person() = New Person(4) {} 
Console.WriteLine(Person.counter
لا تتوقع ان الناتج سيكون 5 ، للاسف توقعك ليس في محله ، والسبب ان اياً من نسخ MyEmpolyee لم يتم انشاءه بعد ، الحالة التالية هي من ستعطيك الناتج 5 :


C#:
كود PHP:
Person [] MyEmpolyee = new Person[5];
for (
int i 05i++)
MyEmpolyee[0] = new Person();
Console.WriteLine(Person.counter); 
VB.net:
كود PHP:
Dim MyEmpolyee As Person() = New Person(4) {} 
For 
As Integer 0 To 4 
  MyEmpolyee
(0) = New Person() 
Next 
Console
.WriteLine(Person.counter
Static Class :

منذ .net framewrok 2.0 تم اعتماد مبدأ ال Static Class ، وبطبيعة الحال فإن أي Static Class لا بد ان تكون جميع المتغيرات والدوال فيه من نوع static ، اضف إلى ذلك فإنه ليس من المنطقي تعريف object من هذا الكلاس باستخدام New .

في هذه الحالة يمكن استخدام الكلاس ودوالة مباشرة ، ابسط امثلة هذا ال Class هي MessageBox والتي يمكن استخدامها مباشرة دون تعريف نسخة منها .


توقيع : khaledbelal



(أَفَأَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا بَيَاتاً وَهُمْ نَآئِمُونَ {97} أَوَ أَمِنَ أَهْلُ الْقُرَى أَن يَأْتِيَهُمْ بَأْسُنَا ضُحًى وَهُمْ يَلْعَبُونَ {98}
أَفَأَمِنُواْ مَكْرَ اللّهِ فَلاَ يَأْمَنُ مَكْرَ اللّهِ إِلاَّ الْقَوْمُ الْخَاسِرُونَ {99}).
سورة الأعراف.

رد مع اقتباس
إضافة رد


تعليمات المشاركة
لا تستطيع إضافة مواضيع جديدة
لا تستطيع الرد على المواضيع
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

BB code is متاحة
كود [IMG] متاحة
كود HTML معطلة

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

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس الخامس والعشرون : الأخطاء واقتناصها .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 1 12-16-2010 11:47 PM
الدرس 5: التعرف على العبارات المشروطة والحلقات التكرارية (دورة الـ c#) khaledbelal دورة CSharp 2008 من منتدى فيجوال بيسك للعرب 1 10-29-2010 06:40 PM
الدرس الرابع عشر : this دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-19-2010 07:58 PM
الدرس التاسع : ال Enumeration دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-18-2010 04:27 PM
الدرس الخامس : الأنواع والدوال الرئيسية .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-16-2010 03:24 AM

استضافة الحياة

الساعة الآن 04:12 PM.


Powered by vBulletin® v3.8.4, Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. , TranZ By Almuhajir
النسخة الفضية
Ads Management Version 3.0.1 by Saeed Al-Atwi

SlamDesignzslamDesignzEdited by Riad Al-Ganah Team - جميع الحقوق محفوظة لشبكة رياض الجنة

Privacy Policy Valid XHTML 1.0 Transitional By SlamDesignz Valid CSS Transitional By SlamDesignz