المقالة مصدرها http://msdn.microsoft.com/msdnmag/issues/0...p/ctocsharp.asp مع بعض الاختصارات ..
كل عشر سنوات تقريبا يجب على المطورين أن يضعو طاقاتهم في تعلم تقنيات جديدة. في بداية الثامانينات كان ال Unix و لفة السي هي المسيطرة ومن ثم في التسعينات بدأ المطوريين بتعلم وندوز والسي++ والآن ظهرت تقنية .NET وال سي شارب .. طبعا تعلم لغة وبيئة جديدة يأخذ الوقت والجهد الكثير ولكن لحسن الحظ فإن تصميم البرمجيات في سي # وتقنية .NET لم يختلف كثيرا عن الوندوز والسي++ . في هذه المقالة سوف أوضح بعض الفروقات التي يحتاجها مبرمج السي++ للانتقال إلى السي # .
هناك بعض المقالات التي تتطرقت إلى التحسينات التي أضيفت إلى السي # (http://msdn.microsift.com/msdnmag/issues/0...sharp/cshar.asp) . في هذه المقالة سوف أوضح أهم النقاط الضرورية للانتقال من سي++ إلى سي شارب . هذه النقاط هي : الانتقال من بيئة غير منظمة إلى بيئة منظمة ، و الثغرات التي سوف تواجه مبرمج السي++ ، بعض الميزات والتحسينات التي سوف تؤثر على طريقة برمجتك .
الانتقال من بيئة غير منظمة إلى بيئة منظمة:
السي++ هي لغة صممت كلغة غرضية التوجه منخفضة المستوى قليلا يمنح المبرمج بها التحكم الكامل والمرونة الكاملة بالتحكم بالأنواع . أما السي شارب صممت لتكون عالية المستوى وأيضا غرضية التوجه . على سبيل المثال في السي++ فإنك تتحكم بشكل تام بعملية بناء العناصر ومحل توضعهم في الذاكرة ، يمكن أن تضعهم بالمكدس أو في الكومة Heap . في سي شارب الأنواع البسيطة ك int و double فهي دائما بالمكدس أما ال classes فهي في الكومة .
أيضا في السي شارب لن تتحكم بشكل مباشر بمدة بقاء العناصر في الذاكرة . السي شارب لاتحتوي على destructor أو هادم كما هو في السي++ . يوجد ما يسمى بمجمع النفايات أو Garbage Collector سوف يقوم بافراغ العناصر من الذاكرة بعد مدة بسيطة عندما لا يوجد أي كود يستخدم الكائن أو العنصر .
بنية السي شارب جعلتها تفتقر لبعض الأمور المهمة الموجودة في السي++ مثلا الوراثة المتعددة (multiple inheritance) واستخدام القوالب Templates . وذلك بسبب أن برمجة امكانية الوراثة المتعددة في بيئة منظمة ولا تحتوي على هادم صعب جدا وأيضا بسبب أن الأنواع العامة لم يتم اضافتها للسي شارب generics .
الانواع البسيطة في سي شارب ماهي إلا عبارة عن وصلة إلى أنواع اللغة الموحدة أو
oCommon Language Runtime . مثلا int هو نفسه Systen.Int32 .
أهم الأمور التي تميز سي شارب عن بقية لغات ال دوت NET هو أن لغة السي شارب مصممة بشكل جيد حتى تستفيد من البنية التحتية للكلاسات والواجهات والكائنات التي تقدمها تقنية دوت NET ..
عثرات مبرمجي السي++ في السي شارب:
في الحقيقة سي شارب تشبة السي++ وهذا مايجعل الانتقال لها سهل وأيضا يجلب المشاكل أيضا . مثلا لو كتبت كود سي++ صحيح مائة بالمائة فإنه لن يترجم في سي شارب والأفظع من هذا فإنه قد لا ينفذ بالشكل الذي نريد. معظم القواعد البرمجية تغيرت عن سي++ ، مثلا لا يوجد فاصلة منقوطة بعد تعريف الكلاس . Main الآن تبدأ بحرف كبير .
هذه الوصلة : http://dotnet.oreilly.com/news/programming...sharp_0801.html توضح 10 أخطاء ممكن أن يقع بها مبرمج السي++ .
الأنواع ذات قيمة value وذات دليل reference :
السي شارب تفرق بين أنواع ال value وال referencce . الأنواع البسيطة ك int , long , double و الstruct كلها عبارة عن value types .. أما الclasses كلها تعامل كأنواع reference . أنواع ال value تحفظ قيمتها بالمكدس كما ال varaibles في السي++ أما أنواع ال reference فتحفظ في المكدس قيمة مؤشر إلى الكلاس الذي يكون في الكومة heap وهي متل المؤشر في السي++ . بالنسبة إلى التمرير إلى التوابع فأنواع الvalue تمرر عن طريق قيمتها by value أي يتم عمل نسخة أخرى بالذاكرة أما أنواع الreference فيتم تمريرها عن طريق هذا الدليل ..
المختصر أن نوع الreference في السي شارب هو بشكل آلي للكلاسيس أما في السي++ فيجب أن يتم ذكر ذلك عن طريق العامل & للكلاسيس أو للأنواع الأخرى .
ال Structs :
ال struct مختلف تماما في السي شارب . في السي++ كما نعلم فإن الstruct هي نفسها الclass والفرق الوحيد أن الوصول الافتراضي لل struct هو public أما الكلاس فهو private . الstruct في سي شارب مختلف تماما عن الكلاس . هي مصممة في السي شارب من أجل أن تحتوي على كائنات بسيطة والstruct عبارة عن أنواع ذات قيمة وهي بالتالي تمرر بقيمتها . وايضا الstruct لا يمكن أن يشتق منه حيث يعتبر بنية معطيات مقفلة أي لا يمكن أن يعدل بها . وأيضا الstruct هو أكفأ من الclass من ناحية البناء وهي الأفضل من الكلاس في حالة احتواء عناصر قليلة .
سوف أكمل إن شاء الله قريبا..

