الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ما الجديد في C# 3.0 و ماهو LINQ Project

مغلق
بدأه bashmohandes في 20 فبراير 2006 · 11 رد · 2,288 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

أعتقد أن أغلبنا قد استخدم C# 2.0 بطريقة أو بأخرى و بالتأكيد أن أغلبنا لم يتطرق الى كل ماهو جديد في C# 2.0 و مع هذا فان Microsoft بدأت تُعلن عن C# 3.0 و قد صدرت بالفعل ال Language Specifications على موقع المستقبل الخاص بالMSDN

http://www.msdn.microsoft.com/netframework/future

و هذا يدل أن قطار الDotNet يكاد يسير بسرعة الضوء و علينا اللحاق به...

الأن ماهو الجديد في الC# 3.0

للاجابة على هذه السؤال سنتطرق أولاً للمشاكل الموجودة في ال#C حتى نستطيع استيعاب الحل...

1- الDatabase و الGeneral Purpose Languages ظلا دائماً عالمين منفصلين و لكلٍ منهم خصائصه و مميازته و عيوبه فمثلاً البرمجة في الDatabase هي Declarative Programming أي أنك تشرح ماذا تريد أن تفعل باستخدام الSQL ثم تترك للDBMS الحرية في التصرف في أفضل طريقة لعمل هذا

مثال عندما نكتب Select * From Customers فاننا نقول للنظام أردي بيانات العملاء و لكن لم أقل له اذهب و افتح الملف على HDD ثم قم بعمل loop على العملاء و ضعهم في array ....الخ و لكن النظام هو من قال بعمل الQuery Map و الExecution لهذا السؤال

أما في الGeneral Purpose Programming Languages مثل ال#C و ال++C/C و غيرها فهي Imperative Programming أي أنك تحدد كيف تقوم بحل المشكلة بالتفصيل الممل...

أيضاً هناك فروق اخرى تم حلها في C# 2.0 مثل أن الDatabase تقبل متغيرات ذات قيمة NULL أما ال#C فلا تقبل و كان حلها هو ابتكار الNullable Types الرائعة

2- طبيعة المشكلة السابقة جعلت التعامل بين العالمين المختلفين يتم عن طريق وسيط مثل الADO/ ADO.net و يتم اعطاء الQueries للADO على شكل Strings و هذا جعل نوع اخر من المشاكل تظهر و هو أن الCompiler الخاص بال #C لا يقوم بالتأكد من صحة الQueries و بالتالي لا يستطيع أن يحسنها فمثلاً لو قمت بكتابة

Selet * From Customers فلن يعترض الCompiler على كلمة Selet أنها مكتوبة خطأ و سيقوم بعمل Build و تظهر هذه المشكلة كRun Time Error و هذا أسوأ ما في المشكلة ....

3- مشكلة أخرى و هي تميز بعض اللغات مثل الPython و التي تتبع الDynamic Languages بأنه يمكنك تعريف متغيرات دون ذكر نوعها و يتم التعرف على نوعها من السياق

فمثلاً var x = 10 هكذا أصبح x من نوع integer دون أن أذكرها و أيضا

var y = new File و هنا أصبح الy عبارة عن object من نوع File دون أن اضطر لذكر كلمة File مرتين قبل المتغير و بعده و هي تصبح مملة أحياناً عندما يكون اسم الClass كبير :lol:

أيضأً في الDynamic Languages يمكنك أن تقوم بعمل Initialization للمتغيرات في الConstructor دون أن تقوم بعمل الكثير من الConstructors المختلفة فبفرض أن الClass Customer لها الخصائص Name, Company, Address ففي #C يجب عليك أن تقوم بانشاء Constructor يأخذ 3 Parameters حتى يمكنك عمل Initialization كامل في الConstructor و لكن في الDynamic Language يمكنك عمل هذا ببساطة هكذا

var c = new Customer(Name= "bashmohandes", Address= "Egypt", Company = "Whatever");

و هذا يقلل سطور الكود الخاصة بالInitialization و أيضاً الخاصة بكتابة الconstructors ...

ما سبق هو بعض المشاكل التي كانت تواجه المبرمجين و التي سيتم حلها في الC# 3.0 و سنعرض حل هذه المشاكل الموجود في C# 3.0 الان

1- تم حل هذه المشكلة الى حد كبير في مشروع LINQ و الذي يقدم طريقة لكتابة الQueries داخل ال#C

مثال

public void Linq2() {
    List products = GetProductList();

    var soldOutProducts =
        from p in products
        where p.UnitsInStock == 0
        select p;
    
    Console.WriteLine("Sold out products:");
    foreach (var product in soldOutProducts) {
        Console.WriteLine("{0} is sold out!", product.ProductName);
    }
}

و هنا نلاحظ استحداث Code Block جديدة و هو From .... In .... Where ..... Select كما أنه يمكنك استخدام بعض العمليات الأعقد مثل الorder by, group by و غيرها من عمليات الDatabase المختلفة

أيضاً ستلاحظ أن From جاءت في أول الQuery بينما جاءت الSelect في النهاية و هذه الطريقة تعتبر أوضح قليلاً و ان كانت غريبة بعض الشئ...

و الأجمل أن هذه الطريقة غير مقصورة على الDatabase Results و لكن يمكن أن تستخدم في أي شئ يمكنك مثلاً أن تقوم باستخدامها مع الFile System للبحث عن ملفات أو مع الReflection للبحث عن عمليات في Dll معينة و أيضأً مع الXML و أيضاً مع الArrays العادية

مثال اخر

public void Linq1() {
  int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

  var lowNums = 
    from n in numbers 
    where n < 5 
    select n; 

  Console.WriteLine("Numbers < 5:");
  foreach (var x in lowNums) {
    Console.WriteLine(x);
  }
}

و هنا استخدم الLINQ في تحديد الأرقام الأقل من 5 مجموعة الأعداد..

2- في المشكلة الثانية الناجمة عن طبيعة المشكلة الأولى فقد أصبح الCompiler مسؤولاً عن تصحيح الاخطاء البرمجية في الQueries و أيضاً عمل الOptimizations اللازمة

3- تم اضافة الكثير من مميزات الDynamic Languages في C# 3.0 فمثلاً يمكن الان الاستفادة من خصائص الDynamic Langauges مع الاستفادة من قوة الStrongly Typed Languages فمثلاً

var x = 1;
x = "mohammed"; //Error x is Integer

يمكنك الان للCompiler أن يتعرف على نوع المتغير عن طريق نوع القيمة التي توضع فيه و أيضاً اذا تم تغيير نوع هذه القيمة فيما بعد فان الCompiler يعترض لأن هذا يُعتبر تجاوز لقوانين الStrongly Typed Languages

و أيضاً الان يمكنك استعمال الطريقة الجديدة في استخدام الConstructors و التي تشبه تماماً الConstructors في الDynamic Languages

هكذا

var c = new Customer(Name= "bashmohandes", Address= "Egypt", Company = "Whatever");

كما أن ال#C كما دعمت الAnonymous Methods في C# 2.0 فأيضاً الان تدعم الAnonymous Classes

و أيضاً توجد بعض الخصائص الجديدة مثل الSequence و غيرها

و يمكنك تحميل الC# 3.0 من نفس الموقع الذي ذكرته في أو المشاركة و هو يعمل مع أي نسخة من نسخ VS 2005 مثل الProfessional أو الExpress و يأتي معه الكثير من الأمثلة...

أرجو أن تكونوا قد استفدتم من الموضوع

شكراً

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#2

جزاك الله خيرا

#3
اقتباس
كما أن ال#C كما دعمت الAnonymous Methods في C# 2.0 فأيضاً الان تدعم الAnonymous Classes

و أيضاً توجد بعض الخصائص الجديدة مثل الSequence و غيرها

ارجو مثال ل Anonymous و ما قصدك تدعم ال class وليه كده و شكرا على الرد مقدما :D

365159135_b0fcd2be76_o.jpg

365163463_a76592857a.jpg
#4

فعلا LINQ مشروع جميل جدا و حيحل العديد من المشاكل

شكرا يا بشمهندس على المقالة

#5

مشكور أخي على الشرح بس بدي إسألك أنا عندي نسخة دوت نيت بروفشينال 2005فهل تدعم سي شارب 3

مع العلم أني نزلت الملف المطلوب للتهيئة لكن ليس دائماً يعمل البروجيكت بشكل جيد ولكن أحياناً يعطي أخطاء عن الكلمات الجديدة ولا يفهمها

أفدني أثابك الله

كما تكون لعباد الله يكون الله لك

#6

-9

مقال جميل والواحد يا دوب يلحق مع هذا التطور السريع لسة ما خلصناش من c#2 ,و vb.net2

بالنسبة لanonymous method فهى عبارة عن جسم الميثود بدون هيدر وتكتب فى نقطة استخدامها وفى الدوت نت بتستخدم مع delegates زى event handlers

شوف هذا الDelegate بالطريقة التقليدية

private void Form1_Load(object sender, EventArgs e)

              {

                     button1.Click += new EventHandler(ButtonClick);

              }



              private void ButtonClick(object sender, EventArgs e)

              {

                     MessageBox.Show("Hello, World!");

              }

وهنا مع الـAnonymous Delegate Method

 private void Form1_Load(object sender, EventArgs e)

              {

                     button1.Click += delegate{ MessageBox.Show("Hello, World!"); };

              }

ويا ريت مثال لاستخدامها مع الـClass ومشكور مقدما :)

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#7
abohmza كتب:
مشكور أخي على الشرح بس بدي إسألك أنا عندي نسخة  دوت نيت بروفشينال 2005فهل تدعم سي شارب 3

مع العلم أني نزلت الملف المطلوب للتهيئة لكن ليس دائماً يعمل البروجيكت بشكل جيد ولكن أحياناً يعطي أخطاء عن الكلمات الجديدة ولا يفهمها

أفدني أثابك الله

المشكلة انك لانشاء Project جديد يدعم C# 3.0 يجب أن تثبت WinFX SDK و لكن يمكنك أن تستخدم الProjects الموجودة كSamples و تزيل الكود منها و تكتب ما تريد

يعني خد منها Copy و امسح الأكواد و جرب مع نفسك

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#8

الAnonymous Class هي شئ مشابه لنفس فكرة الAnonymous Method و هي استخدام Class في السريع

هكذا

var person = new {hair="black", skin="green", teethCount=64}
Console.WriteLine(person.hair);

و هي تصلح في الحصول على Strong Data Type يصلح للاستخدام في خلال Scope صغير

تم تعديل هذه المشاركة بواسطة bashmohandes في 20 فبراير 2006 في 17:42

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#9

جزاك الله خير اخي علي المعلومات الجميله ولكن هلي سي شارب 3 هتنزل مع الاصدار القادم من الفيجوال استوديو

Khaled_Tiger

النجاح الوحيد في الحياة هو أن تستطيع أن تحيا حياتك بالطريقة التي تريدها

يخاطبني السفيه بكل قبح *** فأكره أن أكون له مجيبا

يزيد سفاهة فأزيد حلمــا *** كعود زاده الإحراق طيبا

إذا نطق السفيه فلا تجبه *** فخير من إجابته السكوت

فإن كلَمته فرَجت عنــــه *** وإن خليته كمداً يـمـــوت

#10

في الأغلب هي تتبع مشروع ORCAS أو Visual Studio 2007

Sr. Software Development Engineer
Hulu, LLC
My Blogs

#11

شكرا اخي بشمهندس علي الرد

Khaled_Tiger

النجاح الوحيد في الحياة هو أن تستطيع أن تحيا حياتك بالطريقة التي تريدها

يخاطبني السفيه بكل قبح *** فأكره أن أكون له مجيبا

يزيد سفاهة فأزيد حلمــا *** كعود زاده الإحراق طيبا

إذا نطق السفيه فلا تجبه *** فخير من إجابته السكوت

فإن كلَمته فرَجت عنــــه *** وإن خليته كمداً يـمـــوت

#12
اقتباس
يجب أن تثبت WinFX SDK

دخيل عينك من وين بدي جيب ال WinFX SDK

وبعد مانزلوا حيمشي الحال تمام

كما تكون لعباد الله يكون الله لك

هذا الموضوع مغلق.

مواضيع مشابهة