منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : الدرس العاشر : التراكيب :) Structure
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
منقول من المنتدى القديم
كاتب المقال احمد جمال المشرف العام
بتاريخ 27-02-08

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


ال 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#:
كود :
[CODE]


struct Licence
{
public string UserName;
public int yearsToFinish;
[/CODE]

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

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

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


End Sub

End Structure

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

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