نظام للمعلومات

لغة C#

خالد عياد الشقروني

 

  في شهر يونيه 2000، أعلنت ميكروسوفت عن بيئة .Net و عن لغة جديدة تدعى C# (سي شارب).

 لغة C# لغة قوية التمثيل strongly-typed ذات منحى كائني، صممت لكي تقدم أفضل مزيج من البساطة و التعبيرية و الأداء. أما بيئة .Net فترتكز حول وقت_تشغيل لغة عامة Common Language Runtime (شبيهة بآلة جافا الاقتراضية JVM) و مجموعة من المكتبات التي يمكن استغلالها من قبل عدد واسع من اللغات التي بامكانها أن تعمل معا عند تحويلها compiling إلى لغة وسيطة intermediate language (IL) . كل من C# و بيئة .Net متعاضدتان بقدر ما، بعض خصائص C# وضعت كي تعمل بصورة أفضل مع.Net   و بعض خصائص .Net وضعت كي تعمل أفضل مع C# (بالرغم من أن هدف .Net أن تعمل بصورة جيدة مع لغات متعددة). تم بناء لغة C# باستلهامها لعدد من اللغات السابقة، لكن أكثرها وضوحا هي جافا و C++. تم تأليف اللغة من قبل اندريس هيزبرج Anders Hejlsberg مشاركة مع سكوت ويلثموت Scott Wiltamuth. هيزبرغ هو أيضا من قام بتصميم .Net  وقيادة العمل فيها.

لغة C# لغة بسيطة تحوي فقط 80 كلمة مفتاحية keywords و اثنا عشر من قوالب أو أنواع البيانات datatypes المغروسة فيها. لكن C# لها قدرة تعبيرية عالية عند بناء المفاهيم البرمجية الحديثة. تتضمن C# دعما كليا للبرمجة البنيوية structure و المرتكزة على المكونات component-based و المنحى للكائن object-oriented، و الذي يتوقعها المرء من أية لغة حديثة. لغة C# استلهمت أفضل خصائص اللغات السابقة أهمها SmallTalk و C++ و Java و دلفي، كما أبتعدت عن كثير من عيوبها. و هي شبيهة جدا في صيغتها بلغتي C++ , Java.

تم تطوير اللغة من قبل فريق صغير في مايكروسوت بقيادة اثنين من كبار مهندسيها هما: اندريس هيزبرغ Anders Hejlsberg و سكوت ويلثموت Scott Wiltamuth. اشتهر هيزبرغ بابتكار Turbo Pascal أحد أول بيئات التطوير المتكاملة، كذلك لقيادته لفريق العمل الذي صمم بيئة تطوير  دلفي و مجموعة مكتبة المكونات فيها VCL من بورلاند.

C#  كلغة ذات منحى للكائن تدعم تعريف الصنفيات classes و التعامل معها، الصنفيات تحدد أنواعا types جديدة تتيح توسعا لللغة من أجل معالجة أفضل للمسائل المراد حلها. C# تمتلك كلمات مفتاحية لتعريف صنفيات جديدة و مناهجها و خصائصها و للقيام بعمليات التغليف encapsulation و التوريث inheritance و التشكل polymorphism و هي الدعامات الثلاث للبرمجة بالمنحى للكائن.

في C# كل ما يتعلق بتعريف الصنفية class declaration موجود في التعريف نفسه (كما في لغة دلفي). تعريف الصنفية في C# لا يتطلب ملفات ترويس header منفصلة أو ملفات للغة تعريف الواجهة (IDL) Interface Definition Language، أكثر من ذلك، أن C# تدعم نمط XML الجديد من أجل التوثيق الداخلي في التوليف، و الذي يسهل عمليات استخراج الوثائق المرجعية و ملفات المساعدة للتطبيق.

تدعم C# أيضا الواجهات interfaces ، و هي وسيلة تعاقدية مع الصنفية من أجل خدمات محصورة فقط في المحددات التي اشترطتها الواجهة. في C# الصنفية لا يمكنها الوراثة inherit إلا من أصل واحد، لكن الصنفية يمكنها تنفيذ عدة واجهات. عند تنفيذ الواجهة تقوم صنفية C# بتقديم فقط الوظيفيات التي حددتها الواجهة.

تدعم C# أيضا البناءات structs ، و هو المفهوم الذي تغير كلية عن ما كان عليه في C++. في C# البناء يكون نوعا مقيدا، و خفيفا بحيث لا يشكل عند استحضاره عبئا على نظام التشغيل أو الذاكرة كما هو الحال في الصنفية. البناء struct لا يمكنه الوراثة من صنفية أو التوريث منه، لكن بإمكانه تنفيذ واجهة interface.

توفر C# مقومات المنحى للمكونات component-oriented، مثل الخصائص properties و الأحداث events و بناءات التعريف و تسمى سمات attributes. البرمجة بالمنحى للمكون مدعومة في جزئية CLR في بيئة .Net حيث تقوم بتخزين بيانات التعريف metadata مع التوليف الخاص بالصنفية. بيانات التعريف تصف الصنفية ومكوناتها من مناهج و خصائص، بالاضافة لاحتياجاتها الأمنية و السمات الأخرى مثل إذا كان بالإمكان تسلسلها serialized للمرور عبر حدود الشبكات، أو التوليف الحاوي لطريقة التعامل مع الوظيفيات. لذلك فإن الصنفية المحولة compiled تكون وحدة متكاملة المعلومات، بحيث يمكن للبيئة المستضيفة لها أن تعرف منها وحدها كيفية قراءة بيانات التعريف للصنفية، و لا يتم الاحتياج لمعلومات أخرى من مصادر منفصلة. باستخدام C# و CLR يمكن إضافة بيانات تعريف مخصوصة للصنفية بانشاء سمات خاصة بها. و من جهة أخرى من الممكن قراءة بيانات التعريف الخاصة بالصنفية باستخدام أنواع CLR لتقوم باستظهار هذه البيانات من خلال خاصية الانعكاس reflection فيها.

أيضا المجمع assembly و هو مجموعة من الملفات التي تظهر للمبرمج و كأنها ملف  مكتبة ربط حيوية (DLL) أو ملف تنفيذي. و يعد المجمع في .Net الوحدة الرئيسية من أجل القيام بإعادة الاستخدام و التحكم في الإصدارة versioning و الأمنية security و التجهيز للنشر deployment. و يوفر CLR مجموعة من الصنفيات لمناولة المجمعات.

تقوم C# أيضا بتقديم الدعم للنفاذ المباشر للذاكرة باستخدام مؤشرات pointers بنمط C++ و كلمات مفتاحية من أجل حصر مثل هذه العمليات على أنها "غير آمنة" unsafe، و لتنبيه جامع المهملات garbage collector في CLR بأن لا يقوم بالتقاط الكائنات objects التي تشير إليها المؤشرات حتى يتم تسريحها released من قبل البرنامج.