![]() |
|
7.0 Pattern Matching in C#.NET - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (https://vb4arb.com/vb) +-- قسم : قسم لغة السي شارب C#.NET (https://vb4arb.com/vb/forumdisplay.php?fid=175) +--- قسم : قسم مقالات C#.NET (https://vb4arb.com/vb/forumdisplay.php?fid=177) +--- الموضوع : 7.0 Pattern Matching in C#.NET (/showthread.php?tid=21511) |
7.0 Pattern Matching in C#.NET - Sajad - 27-08-17 بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))
7.0 Pattern Matching in C#.NET
هذه الخاصية كانت موجودة في لغة C# في الاصدارات السابقة وجرى تطويرها في الاصدار الاخير من اللغة (C# 7.0) حيث اصبح بالامكان اسناد قيمة المتغير الى المتغير الجديد في حال كان من نفس النوع.
يمكن استخدام هذه الخاصية مع (is expression) و (switch statement) حيث تم تطوير (switch statement) في الاصدار C# 7.0 ليقبل الانواع الاخرى ايضا ولم يبقى محددا للـ Value Types بل اصبح بامكانك استخدام الـ Reference Type ايضا. سنوضح ذلك باذن الله في درس اخر. لنوضح خاصية الــ Pattern Matching بهذا المثال : لو كان لدينا كلاس أب باسم Person يحتوي على الخصائص التالية (الاسم، العمل، الراتب) ويحتوي على دالة باسم (PrintInfo): PHP كود : public abstract class Personولدينا الكلاسات التالية (Employee, Player) ترث من الكلاس Person: PHP كود : public class Employee : Personالان لو عملنا قائمة (List) من الكلاس Person وقمنا بملئ المعلومات بالشكل التالي:
PHP كود : var personList = new List<Person>كما تلاحظ أنه بامكاننا اضافة معلومات كلاسات الابناء لانها ترث من الكلاس Person وبامكاننا استخدام الخصائص (Properties) الموجودة في الكلاس الأب بشكل طبيعي.
هنا نطرح السؤال التالي: قم بكتابة كود برمجي لايجاد الراتب الكلي لجميع الموظفين واللاعبين في القائمة <List<Person.
كما ترى اخي العزيز أن القائمة فيها نوعين من الـ Type وهي Employee و Player.
طيب كيف اقوم بالتمييز بينهما بحيث اقوم بحساب الرواتب للموظفين واللاعبين بشكل منفصل؟
الجواب هو: باستخدام Pattern Matching.
طيب لنرى الطريقة القديمة قبل استخدام الخاصية الجديد:
PHP كود : // d is for doubleلنرى الان الطريقة الجديدة واترك لكم ملاحظة الفرق بالكود:
PHP كود : // d is for doubleالاختلاف بين الكودين هو امكانية تعريف متغير اثناء التحقق من نوعية الـType وفي حال تحقق الشرط يتم اسناد القيمة الى المتغير في نفس السطر. دون الحاجة الى انشاء متغير وعمل casting لها كما في الكود السابق. فعمل الـ is هنا كالتالي: هل item هو Employee اذا نعم اسند قيمة الـitem الى المتغير الجديد emp في نفس السطر وهكذا مع الـPlayer. لنستخدم الكود الثاني مع الـswitch: سأكتب في جزء Pattern Matching داخل الـforeach loop: PHP كود : switch (item)كما قلت سنتناول switch في الـ C# 7.0 في درس آخر باذن الله.
لا تنسونا و والديّ من صالح دعواتكم.
RE: 7.0 Pattern Matching in C#.NET - bishoe - 08-09-17 شرح رائع استمر |