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

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

إضافة رد

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

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

نواصل في هذا الدرس مع واحدة من التطورات الجديدة مع .net framework 2.0 ، هي ال generics لتعطي بعداً جديداً لمفهوم ال overloading ، لنفترض مثالاً ما للطباعة بالشكل التالي :

C#:
كود PHP:
public static void print(int x)
        {
            
Console.WriteLine("Print As Integer {0}"x);
        }
        public static 
void print(long x)
        {
            
Console.WriteLine("Print As Long {0}"x);
        }
        public static 
void print(string x)
        {
            
Console.WriteLine("Print As String {0}",x);
        } 
vb.net:

كود PHP:
Public Shared Sub print(ByVal x As Integer
    
Console.WriteLine("Print As Integer {0}"x
End Sub 
Public Shared Sub print(ByVal x As Long
    
Console.WriteLine("Print As Long {0}"x
End Sub 
Public Shared Sub print(ByVal x As String
    
Console.WriteLine("Print As String {0}"x
End Sub 
الكود كما هو واضح قام بعمل ثلاث دوال بنفس الاسم لاستقبال بارميترات مختلفة ، وهكذا تجد انك تستطيع في الكود استدعاء الدالة الطباعة للارقام او لل longs او للنصوص ، جرب عدة عمليات لطباعة انواع مختلفة وشاهد جملة الطباعة ، على سبيل المثال الأوامر التالية :
كود PHP:
print("Ahmed");
            print(
12);
            print(
1000000000000); 
سيكون ناتج الطباعة بالشكل التالي :



ال Generics ستغير المفهوم نوعاً ، حيث ان بامكانك الآن تعريف دالة لا تستقبل نوعاً معيناً من المتغيرات ، بل هي تستقبل <T> وتتعامل معه على هذا الاساس ، لذا قد نستطيع افتراض الدوال الثلاث السابقة بالشكل التالي :

C#:
كود PHP:
public static void print<T>(T x)
        {
            
Console.WriteLine("Print As {0}: {1}",typeof(T), x);

      } 
vb.net:
كود PHP:
Public Shared Sub print(Of T)(ByVal x As T
    
Console.WriteLine("Print As {0}: {1}"GetType(T), x
    
End Sub 
والآن في حالة تطبيقنا لنفس المثال السابق ، سوف يكون الناتج كالتالي :



كانت هذه مقدمة سريعة لل Generics ، نواصل في دروس قادمة التعرف على نقاط أخرى حول هذا الموضوع ، لا تنس ان هذا درس من سلسلة دروس نطبق فيها مبادئ تتعلق ب LINQ حيث ان كل ما يتعلق بالانواع المجهولة والدوال المجهولة ... الخ يتعلق بشكل أو بآخر بال LINQ .

Structure and Class Generics :

في الدرس السابق تعرفنا على ال methods التي تطبق ال Generics ، ايضاً ال Classes وال Structs يمكنها تطبيق هذا المفهوم لبعض البيانات بها ، سنفترض مثال ال class وما ينطبق على ال class ينطبق على ال struct .

لنفترض كلاس يحتوي على البضائع ، وحيث ان لدينا نوعين من البضائع يحتوي النوع الأول على الاسم وهي تلك البضائع التي يتم تصنيعها في المحل ( انوع من الجبن او الزبادي ) وبضائع أخرى جاهزة تحتوي على الباركود ، بهذه الطريقة نسنتج ان حقل Identify قد يحتوي على اسم في بعض البضائع ورقم في بضائع أخرى .

الحل التقليدي كان ليعتبر وجود كلاسين منفصلين ، أو في أحسن الظروف وضع قيمة منطقية لتحديد اذا ما كنت ساستخدم حقل ال name ام حقل ال numbner ، لكن مع ال Generics تم تغيير هذا المفهوم ، في هذه الحالة سيصبح الكلاس بالشكل التالي :
c#:
كود PHP:
public class product<T>
        {
            private 
T Identify;
            public 
product(T val)
            {
                
Identify val;
                
Console.WriteLine(Identify);
            }
        } 
vb.net:
كود PHP:
Public Class product(Of T
    Private 
Identify As 
 
    
Public Sub New(ByVal val As T
        
Identify val 
        Console
.WriteLine(Identify
    
End Sub 
 
End 
Class 
والآن يمكنني تعريف كائن من النوع الأول بالشكل التالي :
C#:
كود PHP:
 
product
<intprd = new product<int>(1001); 
vb.net:
كود PHP:
Dim prd As New product(Of Integer)(1001
أو من النوع الثاني بالشكل التالي :

C#:
كود PHP:
product<stringprd2 = new product<string>("Some Product"); 
vb.net:
كود PHP:
Dim prd2 As New product(Of String)("Some Product"
هناك الكثير من التطبيقات على هذا المفهوم ، نواصل في الدرس القادم إن شاء الله .

Generic Collection :

كما تعرفنا في الدرس السابق ان بامكاننا عمل Generic Class ، اصبح الدور الآن على عمل Generic Collection ، سنقوم بعمل كلاس يستقبل عدة كلاسات ويقوم بعدة عمليات مثل Add,Delete ... etc ، كما تعلمنا سابقاً ، هذا مثال على Collection ما :

C#:
كود PHP:
public class MyCollection<T>
{
private List<
TmyList = new List<T>();
public 
T GetItem(int pos)
{
return 
myList[pos]; 
}
public 
void AddItem(T it)
{
myList.Add(c); 
}
public 
void ClearCars()
{
myList.Clear(); 
}

vb.net:
كود PHP:
Public Class MyCollection(Of T
    Private 
myList As New List(Of T)() 
    Public Function 
GetItem(ByVal pos As Integer) As 
        
Return myList(pos
    
End Function 
    Public 
Sub AddItem(ByVal it As T
        
myList.Add(c
    
End Sub 
    
Public Sub ClearCars() 
        
myList.Clear() 
    
End Sub 
End 
Class 
طبعاً بامكانك اضافة الكثير من الخصائص وربما بعض الخصائص الغير متوفرة اصلاً للبحث وخلافه ، هذا ما يسمى بال Generic Collection حيث يمكن في مراحل لاحقة الاعتماد عليه بدل ال Colelctions العادية حيث يمكن ان يستقبل Car او Employee .... إلى غير ذلك من الخيارات ، بالشكل التالي مثلاً :
C#:
كود PHP:
MyCollection<CarmyCars = new MyCollection<Car>();
myCars.AddItem(temp);
MyCollection<EmployeemyCars = new MyCollection<Employee>();
myCars.AddItem(tempEmployee); 
vb.net:
كود PHP:
Dim myCars As New MyCollection(Of Car)() 
myCars.AddItem(temp
Dim myCars As New MyCollection(Of Employee)() 
myCars.AddItem(tempEmployee
أو حتى ارقام :
C#:
كود PHP:
MyCollection<intmyCars = new MyCollection<int>();
myCars.AddItem(12); 
vb.net:
كود PHP:
Dim myCars As New MyCollection(Of Integer)() 
myCars.AddItem(12

هنا ظهرت لنا مشكلة تتعلق بكون ال Generic Collection الخاص بنا يحتوي على خصائص مثل .name لعرضها ، وهذا ما لا يتوفر مثلاً لكل الكلاسات او للارقام مثلاً ، من هنا جاءت لنا الكلمة المحجوزة Where والتي سنتحدث عنها في الدرس القادم .

Where T :

يتيح لنا هذا الشرط في عمل ال Generic Collection ان لا نقبل سوى بعض الفئات ، يمكننا وضع الشروط بأحد الطرق التالية :

where T : struct
بحيث لا يقبل سوى متغيرات من النوع ValueTpe .

where T : class
لا يقبل سوى من النوع RefernceType .

where T : new()
لا بد ان يحتوي على Constructor .

where T : classname
where T : Iinterfacename
لا بد ان يكون مشتق من class معين او يطبق interface معين .

بهذه الطريقة يمكننا دمج عدة شروط مع بعضها ، لنرى المثال التالي سوية :
C#:
كود PHP:
public class Example <Twhere T : class, IComparable, new() 
vb.net:
كود PHP:
Public Class Example(Of T As {Class, IComparable, New}) 
هذا يعني ان T لا بد ان تكون refernce ، تطبق الواجهة IComparable وتحتوي على Constructor .
ايضاً المثال التالي :
c#:
كود PHP:
public class Example<KTwhere K : class, new()
where T IComparable<T
vb.net:
كود PHP:
Public Class Example(Of K As {Class, New}, As IComparable(Of T)) 
هذا يعني ان T لا بد ان تكون Refernce ولها constructor فيما k لا بد ان تطبق الواجهة IComparable .

والآن ، اصبح بامكانك التحكم بعض الشيء في T بدلاً من جعلها مفتوحة للجميع .

آخر نقطة انبه عليها في هذا الدرس ، انه وتحت مجال الاسماء System.Collections.Generic تجد العديد من ال Collections التي تعاملنا معها سابقاً مثل ال Queue او ال Stack ، ولكن بدلاً من تعاملها مع object فهي تطبق مبادئ ال Generics باستقبالها T .

الآن استطيع ان ازعم انني غطيت بعض النقاط الاساسية في عالم ال Generics ، اتمنى ان اكون قد قدمت شيئاً جديداً .

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


توقيع : khaledbelal



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

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


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

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

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

المواضيع المتشابهه
الموضوع كاتب الموضوع المنتدى مشاركات آخر مشاركة
الدرس السادس عشر : ال OverLoading دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 1 03-02-2011 03:43 PM
الدرس الثلاثون : ال Collections دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-25-2010 02:15 PM
الدرس التاسع عشر : ال Encapsulation دورة .net 2008 khaledbelal دورة .NET 2008 من منتدى فيجوال بيسك للعرب 0 02-20-2010 03:07 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

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

الساعة الآن 10:13 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