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

مشاهدة النسخة كاملة : الدرس العاشر : التراكيب Structure دورة .net 2008


khaledbelal
02-18-2010, 04:33 PM
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .


ال Structure او Structs هي انواع مخصصة من البيانات يمكنك انشاءها تستطيع حمل اي خصائص على شكل متغيرات او حتى دوال وخلافه ، ابسط مثال على Struct هو مثال السيارة ، لكل سيارة نجد موديل الصنع واسم الماركة ورقم اللوحة مثلاً ، يمكننا كتابة ال Struct بالشكل التالي مثلاً :

C#:

struct Car
{
public int carNumber;
public int year;
public string factory;
};
VB.net:

Structure Car


Public carNumber As Integer

Public year As Integer

Public factory As String

End Structure
والآن عندما نريد تعريف نسخة من (سيارة) فإننا نقوم بتعيين خصائصها بالشكل التالي :

C#:

Car ahmedcar = new Car();
ahmedcar.carNumber = 1000;
ahmedcar.factory = "Nissan";
ahmedcar.year = 2007;

VB.net:

Dim ahmedcar As New Car()
ahmedcar.carNumber = 1000
ahmedcar.factory = "Nissan"
ahmedcar.year = 2007

يمكن ان يحتوي ال Struct على عنصر هو الآخر بدوره Struct ، لو افترضنا Struct لرخصة السير يحتوي على اسم المستخدم والسنوات المتبقية لانتهاء الرخصة مثلاً ، فسيكون ذلك بالشكل التالي :

C#:

struct Licence
{
public string UserName;
public int yearsToFinish;
}

VB.net:

Structure Licence


Public UserName As String

Public yearsToFinish As Integer

End Structure

والآن لو اردنا ان نجعل رخصة السير جزء من خصائص السيارة ، فسيتم ذلك بالشكل التالي :

C#:

struct Car
{
public int carNumber;
public int year;
public string factory;
public Licence carLicence;
};
VB.net:

Structure Car


Public carNumber As Integer

Public year As Integer

Public factory As String

Public carLicence As Licence

End Structure

ولتحديد خصائص اي سيارة سنكتب كود بالشكل التالي :

C#:

Car ahmedcar = new Car();
ahmedcar.carNumber = 1000;
ahmedcar.factory = "Nissan";
ahmedcar.year = 2007;
ahmedcar.carLicence.UserName = "Ahmed Gamal";
ahmedcar.carLicence.yearsToFinish = 3;

VB.net

Dim ahmedcar As New Car()
ahmedcar.carNumber = 1000
ahmedcar.factory = "Nissan"
ahmedcar.year = 2007
ahmedcar.carLicence.UserName = "Ahmed Gamal"
ahmedcar.carLicence.yearsToFinish = 3


انشاء الدوال داخل ال Struct :

يمكننا في داخل اي Struct انشاء دالة لتقوم ببعض العمليات على هذا ال Struct ، ابسط مثال على ذلك لو اردنا عمل دالة renew لتجديد رخصة السير ، يمكن في هذه الحالة كتابة ال Struct بالشكل التالي :

C#:

struct Licence
{
public string UserName;
public int yearsToFinish;
public void renew(int periode)
{
yearsToFinish += periode;
}
}

VB.net:

Structure Licence


Public UserName As String

Public yearsToFinish As Integer

Public Sub renew(ByVal periode As Integer)


yearsToFinish += periode

End Sub

End Structure

وهكذا يمكننا تجديد فترة الرخصة عن طريق الوصول إلى هذه الدالة مباشرة .

في التطبيقات الفعلية في العادة لا يسمح لك بالوصول إلى العناصر مباشرة إلا عن طريق دالة وذلك لمنع ادخال بيانات مغلوطة مثلاً . يمكن عمل دالة Create لانشاء ال Struct مثلاً ، وبعد انشاء نسخة من ال Struct يتم استدعاء هذه الدالة لملئ البيانات حيث لن يسمح لك برؤية باقي المتغيرات .

هناك حل آخر باستخدام Constructor او المشيد ، حيث يمكنك وقت انشاء نسخة من ال Struct تمرير البيانات المطلوبة ، يتم كتابة المشيد بالشكل التالي :

C#:

struct Car
{
private int carNumber;
private int year;
private string factory;
private Licence carLicence;
public Car(int p_carNumber, int p_year, string p_factory,Licence p_carLicence)
{
carNumber = p_carNumber;
factory = p_factory;
year = p_year;
carLicence = p_carLicence;
}
};

VB.net:

Structure Car


Private carNumber As Integer

Private year As Integer

Private factory As String

Private carLicence As Licence

Public Sub New(ByVal p_carNumber As Integer, ByVal p_year As Integer, ByVal p_factory As String, ByVal p_carLicence As Licence)


carNumber = p_carNumber

factory = p_factory

year = p_year


carLicence = p_carLicence
End Sub

End Structure


لاحظ اننا حولنا الوصول إلى المتغيرات ليكون private بحيث لا يمكن الوصول له خارج ال Struct ، معرفات الوصول ستكون احد مواضيعنا حينما ندخل في عالم ال OOP لذا لا تتعجل ولكن يكفي ان تعلم ان public تجعل قابلية الوصول من اي مكان إلى المتغير او الدالة ، اما private فلا يمكن الوصول لها إلا من داخل ال Struct .

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