منتدى رياض الجنة - Riad Al-Ganah

منتدى رياض الجنة - Riad Al-Ganah (https://montada.khaledbelal.com/index.php)
-   دورة .NET 2008 من منتدى فيجوال بيسك للعرب (https://montada.khaledbelal.com/forumdisplay.php?f=57)
-   -   الدرس العاشر : التراكيب Structure دورة .net 2008 (https://montada.khaledbelal.com/showthread.php?t=523)

khaledbelal 02-18-2010 04:33 PM

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


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

C#:
كود PHP:

struct Car
{
public 
int carNumber;
public 
int year;
public 
string factory;
}; 

VB.net:
كود PHP:

Structure Car 
    
    
    
Public carNumber As Integer 
    
    
Public year As Integer 
    
    
Public factory As String 
    
End Structure 

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

C#:
كود PHP:

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

VB.net:
كود PHP:

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

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

C#:
كود PHP:

struct Licence
{
public 
string UserName;
public 
int yearsToFinish;


VB.net:
كود PHP:

Structure Licence 
    
    
    
Public UserName As String 
    
    
Public yearsToFinish As Integer 
    
End Structure 

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

C#:
كود PHP:

struct Car
{
public 
int carNumber;
public 
int year;
public 
string factory;
public 
Licence carLicence;
}; 

VB.net:
كود PHP:

Structure Car 
    
    
    
Public carNumber As Integer 
    
    
Public year As Integer 
    
    
Public factory As String 
    
    
Public carLicence As Licence 
    
End Structure 

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

C#:
كود PHP:

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

VB.net
كود PHP:

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


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


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

C#:
كود PHP:

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


VB.net:
كود PHP:

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#:
كود PHP:

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

VB.net:
كود PHP:

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 IntegerByVal p_year As IntegerByVal p_factory As StringByVal 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 .

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


الساعة الآن 05:28 AM.

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

a.d - i.s.s.w