Loading AI tools
لغة برمجة عالية المستوى من ويكيبيديا، الموسوعة الحرة
سي# (بالإنجليزية: #C) (تلفظ سي شارب/see sharp) هي لغة برمجة متعددة الأنماط تتمتع بكونها سكونية التنميط وأمرية وتعريفية ووظيفية وتعتبر كائنية التوجُّه أو البرمجة الشيئية (بالإنجليزية: (Object-oriented programming - OOP) وعمومية وشيئية المنحى (غرضية التوجه) (باستخدام الفئات) كما تخضع لمبادئ البرمجة التركيبية المنحى.
التصنيف | |
---|---|
التنميط | |
ظهرت في | |
صممها |
المطور | |
---|---|
الإصدار الأول | |
الإصدار الأخير | |
المستودع |
متأثرة بـ |
سي++ — سي — جافا — دلفي — مودولا-3 — Cω (en) — إيفل — إف شارب — هاسكل — آيكون — جي شارب — Visual J++ (mul) — أوبجكت باسكال — رست — أم أل (لغة برمجة) — فيجوال بيسك |
---|
امتدادات الملفات | |
---|---|
مواقع الويب |
docs.microsoft.com… (الإنجليزية الأمريكية) docs.microsoft.com… (الألمانية) docs.microsoft.com… (اليابانية) docs.microsoft.com… (الفرنسية) docs.microsoft.com… (الإيطالية) |
قامت مايكروسوفت بتطوير هذه اللغة في إطار عملها على تطوير دوت نِت وتمت الموافقة على تعييرها من منظمة Ecma (المعيار Ecma-334) والمنظمة الدولية للمعايير (المعيار ISO/IEC 23270:2006). إن سي شارب إحدى لغات البرمجة المصممة للعمل على البنية التحتية المشتركة للغات البرمجة (CLI). صُممت لغة سي شارب لتكون لغة بسيطة وحديثة وعامة الأغراض وشيئية المنحى.[1] وقد قاد أندرس هيلسبرغ فريق تطويرها.
الإصدار الأحدث من اللغة هو C# 8 وطرح في 2019 .
يدرج المعيار ECMA الأهداف التصميمية التالية للغة #C:[1]
إن الاسم "C sharp" مستوحى من الرمز الموسيقي حيث يشير الرمز ♯ إلى أن النوتة المكتوبة مرتفعة أكثر بمقدار نصف درجة موسيقية.[2] تتشابه هذه التسمية مع اسم لغة ++C حيث تشير "++" إلى وجوب زيادة المتحول بمقدار 1. يشبه الرمز ♯ شكلاً من أربع إشارات "+" (في شبكة 2x2) بما يعني ضمناً أن هذه اللغة هي زيادة بمقدار 1 على لغة ++C.
تم اختيار رمز الشباك (رمز اليونيكود U+0023) لتمثيل رمز شارب في كتابة اسم اللغة عوضاً عن الرمز ♯ (رمز اليونيكود U+266F) بسبب قيود تقنية تمنع من إظهاره (كافتقار دعم الخطوط القياسية وبعض المتصفحات للرمز ♯) كذلك عدم وجوده على لوحة المفاتيح القياسية.اتبع هذا التقليد أيضاً في معيار توصيف اللغة ECMA 334.[1] على كل الأحوال تستخدم مايكروسوفت الرمز الموسيقي الصحيح عندما يمكنها عملياً القيام بذلك (على سبيل المثال في الحملات الدعائية أو على غلاف المنتج[3]). استُخدمت اللاحقة «شارب» في عدد من لغات دوت نت المبنية على لغات أخرى بما فيها لغة جي شارب (لغة دوت نت صممتها مايكروسوفت بالاشتقاق من لغة جافا 1.1) ولغة إيه شارب (مشتقة من لغة أيدا) ولغة البرمجة الوظيفية إف شارب. أطلق على التحقيق الأصلي من لغة آيفل الخاص بدوت نت اسم آيفل شارب إلا أنه تم التخلي عن هذا الاسم بعد دعم آيفل بشكل كامل. استُخدمت هذه اللاحقة أيضاً في تسمية بعض المكتبات مثل Gtk شارب (تغليف دوت نت لمكتبة +Gtk ومكتبات جنوم أخرى) ومكتبة كوكوا شارب (تغليف مكتبة كوكوا).
بدأ تطوير منصة دوت نت بكتابة مجموعة من مكتبات الصفوف، وقد استخدم نظام تصريف مدار اسمه Simple Managed C أو اختصاراً SMC للقيام بذلك. لاحقاً وبالتحديد في كانون الثاني 1999 شكل أندرس هيلسبرغ فريقاً من المطورين بهدف بناء لغة جديدة اسمها كول (بالإنجليزية: Cool)، يشكل الاسم اختصاراً لعبارة «لغة غرضية التوجه شبيهة بلغة C» (بالإنجليزية: C-like Object Oriented Language). قررت مايكروسوفت الإبقاء على هذا الاسم إلا أنها تخلت عن ذلك لاحقاً لأسباب قانونية لها علاقة بحقوق العلامات المسجلة. على التوازي مع ذلك أُعلن مشروع دوت نت رسمياً في مؤتمر للمطورين المحترفين (PDC) في تموز عام 2000 وأعيد تسمية اللغة إلى سي# كما تم تصدير وقت التنفيذ الخاص بلغة إيه إس بي دوت نت بالإضافة إلى مكتبات الصفوف إلى هذه اللغة.
اعتبر مصمم لغة جافا جيمس غوسلينغ وبيل جوي وهو أحد مؤسسي شركة صن مايكروسيستمز التي أتت بلغة جافا أن لغة سي# ليست سوى «تقليداً» للغة جافا؛ وقد قال غوسلينغ معقباً «إنها [المقصود سي#] كجافا نوعاً ما ولكن بعد التخلي عن الاعتمادية والإنتاجية والأمان». كتب كل من كلاوس كرفت وأنجلكا لانجر في مقال لهما في مدونة «إن جافا وسي# لغتا برمجة متطابقتان تقريباً. وهذا تكرار مضجر يفتقر الإبداع»، «من الصعب جداً الادعاء أن جافا أو سي# لغة برمجة ثورية غيرت الأسلوب الذي نكتب فيه البرامج»، «لقد استعارت سي# الكثير من جافا -والعكس صحيح. حيث تدعم سي# ميزة التعليب وفك التعليب الآن وقريباً سوف نجد ميزةً شبيهة في جافا». قال أندرس هيلسبرغ في تموز عام 2000 أن سي# ليست «نسخة من جافا» بل أنها «أكثر قرباً إلى لغة سي++» من ناحية التصميم.
في تشرين الثاني 2005 أعلن عن الإصدار 2.0 من سي# ومن هنا بدأت سي# وجافا بالتطور في اتجاهات متزايدة الاختلاف. إن أول وأهم هذه الاختلافات كان في إضافة الأنماط العمومية (بالإنجليزية: Generics) إلى كلتا اللغتين حيث كان تحقيقهما لهذه الأنماط شديد الاختلاف حيث تقوم سي# بالتعامل مع الأنماط العمومية كصفوف حقيقية وتولد الكود الخاص بها وقت التنفيذ بينما تتعامل جافا مع هذه الأنماط كميزة مضافة إلى نحو اللغة تمكن المطور من كتابة كود عمومي كما تمكن المترجم من التأكد من صحة الأنماط فقط بينما لا تحول هذه الأنماط إلى أنماط حقيقية وقت التنفيذ ولا يتم توليد كود خاص بها على غرار سي#.
إضافة إلى ذلك فقد أضيفت إلى سي# مجموعة من الميزات الهامة بهدف تمكين استخدام البرمجة الوظيفية فيها كُللت بإضافة لينك في الإصدار 3.0 والإطار البرمجي الداعم لتعابير لامبدا والطرق الملحقة والأنماط غير المسماة. تمكن هذه الميزات المطور من استخدام تقنيات البرمجة الوظيفية عندما يكون من المستحسن القيام بذلك. إن إضافات لينك وغيرها من الميزات الوظيفية تساعد المطور على كتابة أسطر أقل عند القيام بمهام روتينية كالاستعلام من قاعدة بيانات أو إعراب ملف إكس إم إل أو البحث ضمن بنية معطيات بما يمكن من التركيز على هدف البرنامج المنطقي وتحسين مقروئيته وصيانته.
كان لدى سي# جالب للحظ اسمه آندي (سمي باسم أندرس هيلسبرغ) وقد أحيل إلى التقاعد في 29 كانون الثاني عام 2004.
عُرضت سي# على لجنة آيزو الفرعية JTC 1/SC 22 للمراجعة والتعيير، كان اسم المعيار ISO/IEC 23270:2003 وهو ملغى اليوم. تمت الموافقة فيما بعد على تعيير سي# وفق المعيار ISO/IEC 23270:2006.
هذه قائمة بالإصدارات المختلفة للسي#:
الإصدار | سي إل آر[4] | توصيف اللغة | التاريخ | أُطُر العمل | فيجوال ستوديو | ||
---|---|---|---|---|---|---|---|
ECMA | ISO / IEC | مايكروسوفت | |||||
سي# 1.0 | 1.0 | يناير 2002 | ابريل 2003 | يناير 2002 | يناير 2002 | إطار عمل دوت نت 1.0 | فيجوال ستوديو.نت 2002 |
سي# 1.2 | 1.1 | أكتوبر 2003 | ابريل 2003 | إطار عمل دوت نت 1.1 | فيجوال ستوديو.نت 2003 | ||
سي# 2.0 | 2.0 | يونيو 2006 | سبتمبر 2006 | سبتمبر 2005 | نوفمبر 2005 | إطار عمل دوت نت 2.0 | فيجوال ستوديو 2005 |
سي# 3.0 | 2.0 2.0 SP1 |
لا يوجد[ب] | اغسطس 2007 | نوفمبر 2007 |
إطار عمل دوت نت 2.0 (بدون امتداد لينك) |
فيجوال ستوديو 2008 فيجوال ستوديو 2010 | |
سي# 4.0 | 4.0[ج] | ابريل 2010 | ابريل 2010 | إطار عمل دوت نت 4.0 | فيجوال ستوديو 2010 | ||
سي# 5.0 | 4.5[د] | يونيو 2013 | اغسطس 2012 | إطار عمل دوت نت 4.5 | فيجوال ستوديو 2012 | ||
سي# 6.0 | لا يوجد | يوليو 2015 | يوليو 2015 | إطار عمل دوت نت 4.6
إطار عمل دوت نت كور 1.0 إطار عمل دوت نت كور 1.1 |
فيجوال ستوديو 2015 | ||
سي# 7.0 | مارس 2017 | إطار عمل دوت نت 4.7 | فيجوال ستوديو 2017
15.0 | ||||
سي# 7.1 | أغسطس 2017 | إطار عمل دوت نت كور 2.0 | فيجوال ستوديو 2017
15.3 | ||||
سي# 7.2 | نوفمبر 2017 | لا يوجد إطار عمل | فيجوال ستوديو 2017
15.5 | ||||
سي# 7.3 | مايو 2018 | إطار عمل دوت نت 4.8
إطار عمل دوت نت كور 2.1 إطار عمل دوت نت كور 2.2 |
فيجوال ستوديو 2017
15.7 | ||||
سي# 8.0 | سبتمبر 2019 | إطار عمل دوت نت كور 3.0
إطار عمل دوت نت كور 3.1 |
فيجوال ستوديو 2019
16.3 | ||||
سي# 9.0 | نوفمبر 2020 | دوت نت 5 | فيجوال ستوديو 2019
16.8 | ||||
سي# 10.0 | نوفمبر 2021 | دوت نت 6 | فيجوال ستوديو 2022
17.0 | ||||
سي# 11.0 | نوفمبر 2022 | دوت نت 7 | فيجوال ستوديو 2022
17.4 | ||||
سي# 12.0 | ديسمبر 2023 | دوت نت 8 | فيجوال ستوديو 2022
17.4 |
سي# 2.0 | سي# 3.0 | سي# 4.0 | سي# 5.0 | سي# 6.0 [6] | سي# 7.0 | سي# 8.0 | |
---|---|---|---|---|---|---|---|
المزايا المضافة |
|
|
|
|
بحاجة إلى تعديل |
|
• متغيرات للقراءة فقط
بحاجة إلى إضافة |
أ يتضمن مستند توصيف C# 2.0 الخاص بمايكروسوفت مزايا الإصدار 2.0 الجديدة فقط. استخدم التوصيف 1.2 للاطلاع على المزايا القديمة. |
ب لا يوجد معيار Ecma ولا ISO/IEC للإصدارات #C التالية: 3.0 و 4.0 و 6.0 و 7.0 و 7.1 و 7.2 و 7.3 و 8.0 |
ج لا يوجد إصدار 3.0 من سي إل آر |
د رقم الإصدار حسب توثيق سي إل آر هو 4.5 إلاأن قيمة الثابت Environment.Version هي 4.0 [5] |
هـ يقصد بذلك إمكانية التعامل مع المصرف كمكتبة برمجية، بحيث يمكن على سبيل المثال للمطور أن يطلب من المصرف أن يقوم بترجمة مجموعة من التعليمات (على شكل شجرة تعابير) وإعادة حقنها في البرنامج وقت التنفيذ دون الحاجة لإعادة تصريف الكود. |
دعمت لغة سي# بعدد من المكتبات مثل:
ودعمت بالكثير من أُطُر العمل مثل:
لدى لغة سي# النحو التالي:
تتفرد لغة سي# عن غيرها من لغات برمجة إطار عمل دوت نت في كونها مرتبطة بشكل وثيق بمزايا البنية التحتية المشتركة للغات البرمجة (CLI)، فعلى سبيل المثال تنسب معظم الأنماط الحقيقية إلى قرائنها من أنماط القيمة (بالإنجليزية: value-types) الموجودة في CLI. على الرغم من ذلك فإن توصيف اللغة لا يتطرق إلى متطلبات توليد الكود الخاصة بالمصرّف، بمعنى أن التوصيف لا يرغم مصرف سي# على توليد كود متوافق مع وقت التنفيذ المشترك للغات (CLR) أو توليد تعليمات متوافقة مع اللغة المشتركة الوسيطة (بالإنجليزية: Common Intermediate Language) أو أي تنسيق آخر. وهكذا يمكّن (نظرياً على الأقل) مصرّف سي# من توليد كود لغة الآلة مباشرة على غرار باقي المصرفات كمصرّف سي++ ومصرّف فورتران. فيما يلي بعض من المزايا الجديرة بالاهتمام كونها تميز لغة سي# عن لغتي سي وسي++ (بالإضافة إلى جافا لدى ذكر ذلك صراحة):
var
بالإضافة إلى التصريح الضمني عن المصفوفات المنمطة عن طريق الكلمة المفتاحية متبوعة بمهيئ المجموعة.virtual
من أجل إتاحة تجاوز الطرق في الصفوف المشتقة على غرار لغة سي++ (وخلافاً للغة جافا).dynamic
إمكانية الربط مع الطرق أثناء التنفيذ بما يمكن من استدعاء الطرق وتركيب الكائنات وقت التنفيذ مثلما تفعل لغة جافا سكربت.delegate
التي تتيح تعريف مؤشرات قوية التنميط إلى توابع.delegate
وغيرها بشكل يشابه وظيفية الإشارات والمقابس (بالإنجليزية: signals and slots) التي تضيفها بيئة تطوير كيوت إلى لغة سي++.[(MethodImpl(MethodImplOptions.Synchronized]
، كما أنها تدعم أقفال استبعاد التشارك عبر الكلمة المفتاحية lock
.namespace
في لغة سي# نفس المستوى من العزل الذي توفره رزمة package
جافا وفضاء التسمية namespace
سي++، كما أنه يتمتع بالعديد من القواعد والميزات الشبيهة برزمة جافا.bool
بشكل صارم. إذ تتطلب كافة العبارات البرمجية التي تتضمن شروطاً (مثل عبارة while
وعبارة if
) تعابيراً من نمط يحقق المعامل true
كالنمط البولياني مثلاً. بالمقارنة مع لغة سي++ التي تحوي أيضاً النمط البولياني نجد أن سي++ تتيح تحويل هذا النمط من وإلى أرقام صحيحة، نتيجةً لذلك يمكن تتطلب بعض التعابير مثل (if(a
فقط أن يكون a
قابل للتحويل إلى bool
مفسحة المجال بذلك لأن يكون a
من النمط int
أو حتى أو يكون مؤشراً. لا تتيح سي# مقاربة «الأعداد الصحيحة تعني صحيح أو خطأ» على اعتبار أن إجبار المبرمج على استخدام تعابير تعيد النمط bool
تماماً قد يمنع حدوث عددٍ من الأخطاء البرمجية الشائعة في لغتي سي وسي++ (مثل العبارة (if(a = b
حيث استًبدل معامل المقارنة ==
بمعامل الإسناد =
).unsafe
(غير آمن)، وتتطلب البرامج التي تحتوي كوداً غير آمنٍ سماحيات ملائمة كي تعمل. غالباً ما تستخدم الدلائل (بالإنجليزية: References) الآمنة من أجل الولوج إلى الكائنات، حيث تشير هذه الدلائل دائماً لى كائنات فعالة في الذاكرة كما أن لديها قيمة فارغة null
معرفة بشكل ملائم؛ من المستحيل الحصول على دليل إن كائن تم تدميره (من خلال جامع القمامة) أو الولوج إلى كتلة عشوائية في الذاكرة. يمكن للمؤشر غير الآمن الإشارة إلى متحول من نمط-قيمة أو مصفوفة أو سلسلة محرفية أو كتلة من الذاكرة محجوزة على المكدس. يمكن للكود غير الآمن أن يخزن ويتلاعب بالمؤشرات من خلال النمط System.IntPtr
ولكن لا يمكنه الاطلاع على محتوياتها.try...catch
الخاصة بمعالجة الاستثناءات البنية try...finally
التي تضمن تنفيذ الكود الموجود في كتلة finally
سواءً حصل استثناء أم لم يحصل.Int16
إلى Int32
مثلاً). يتم تطبيق هذه السياسة أثناء التصريف وخلال الترجمة في الوقت المناسب (JIT) وفي بعض الأحيان أثناء التنفيذ. لا يوجد تحويل ضمني بين النمط البولياني والنمط الصحيح ولا بين أعضاء الأنماط التعدادية والنمط الصحيح (باستثناء المحرف 0 والذي يمكن تحويله ضمنياً إلى أي نمط تعدادي). يجب الإشارة إلى أي تحويل معرف من قبل المستخدم بشكل صريح أو ضمني بشكل يخالف البواني الناسخة ومعاملات التحويل في لغة سي++ التي تعمل بشكل ضمني افتراضياً.لدى سي# نظام أنماط موحد يدعى نظام الأنماط المشترك (بالإنجليزية: Common Type System) [7] أو اختصاراً CTS. إن نظام الأنماط الموحد يقوم على مبدأ أن كافة الأنماط بما فيها الأنماط البسيطة كالأعداد الصحيحة هي صفوف مشتقة من الصف System.Object
. على سبيل المثال يرث كل نمط الطريقة ()ToString
.
يصنف نظام الأنماط المشترك أنماط المعطيات ضمن فئتين:
تتصف الكائنات من نمط القيمة بأنها لا تملك محدداً مرجعياً ولا تمتلك خصائص المقارنة المرجعية - فمعاملات المساواة وانعدام المساواة بين أنماط القيمة تقوم بمقارنة القيمة الحقيقية للبيانات الموجودة ضمن الكائنات ما لم تكن معاملات المقارنة هذه محملةً بشكل زائد. تُشتق أنماط القيمة من النمط System.ValueType
ولديها دائماً قيمة افتراضية كما يمكن إنشاؤها ونسخها في أي وقت. من أهم القيود المفروضة على أنماط القيمة هو عدم المقدرة على الاشتقاق من بعضها البعض (إلا أنها تستطيع تحقيق الواجهات) كما أنها لا يمكن أن تحوي بانياً افتراضياً (بدون بارامترات). إن الأنماط البسيطة مثل النمط int
(عدد صحيح ذو إشارة بطول 32 بتاً) والنمط float
(عدد فاصلة عائمة بطول 32 بت معرف من آي تربل إي) والنمط char
(وحدة كود من نظام يونيكود بطول 16 بت) والنمط System.DateTime
(يعرف لحظة زمنية ما بدقة نانوثانية) هي أمثلة على أنماط القيمة. كذلك النمط enum
(نمط تعدادي) والنمط struct
(بنى معرفة من قبل المستخدم).
بمقابل ذلك تمتلك أنماط المرجع مفهوم المحدد المرجعي - أي أن كل كائن من النمط المرجعي يمتلك محدداً متميزاً عن محددات بقية الكائنات حتى وإن كان البيانات الموجودة ضمن كائنين هي ذاتها. ينعكس هذا المفهوم على عمليات مساواة أو عدم مساواة أنماط المرجع حيث تقوم باختبار المساواة المرجعية ولا تختبر مساواة القيم بينها إلا في حال تحميل المعاملات المقابلة بشكل زائد (كما هو الحال بالنسبة للنمط System.String
. بشكل عام لا يمكن إنشاء كائنات من النمط المرجعي ولا نسخ كائن موجود ولا إجراء مقارنات بين قيم كائنين مرجعيين، على الرغم من ذلك توفر بين أنماط المرجع خدمات كهذه عبر التصريح عن بانٍ عام أو عبر تحقيق الواجهة الموافقة (مثل ICloneable
وIComparable
). بعض الأمثلة على أنماط المرجع النمط Object
(الصف الأساسي الذي تشتق منه كافة الصفوف الأخرى) والنمط System.String
(سلسلة محرفية من النمط يونيكود) والنمط System.Array
(الصف الأساسي الذي تشتق منه كافة المصفوفات).
كلا الفئتين قابلتان للتوسيع بأنماط جديدة معرّفة من قبل المستخدم.
التعليب (بالإنجليزية: Boxing) هو عملية تحويل كائن من نوع نمط القيمة إلى القيمة الموافقة كنمط مرجعي[7] وهو أحد العمليات الضمنية في لغة سي#.
فك التعليب (بالإنجليزية: Unboxing) هو عملية تحويل قيمة كائن من نوع نمط مرجعي (معلّب مسبقاً) إلى القيمة الموافقة كنمط القيمة.[7] يتطلب فك التعليب قسراً صريحاً للنمط. إذا كان الكائن المعلب من النمط T
يمكن عندها فك تعليب هذا الكائن فقط إلى النمط T
(أو إلى النمط <Nullable<T
).[8]
int foo = 42; // نمط القيمة
object bar = foo; // bar ضمن المتحول foo تعليب المتحول
int baz = (int)bar; // فك التعليب إلى نمط القيمة الأصلي
أضيفت الأنماط العامة إلى سي# بدءاً من الإصدار 2.0. تستخدم الأنماط العامة بارامترات الأنماط والتي تمكن المطور من تصميم صفوف وطرق دون الحاجة إلى تحديد الأنماط المستخدمة، حيث يتم تحديد هذه الأنماط فقط لدى استخدامها. تكمن الفائدة من ذلك بأن القدرة على استخدام بارامترات الأنماط العامة لإنشاء الصفوف والطرق يمكن من استخدامها بشكل فعال كونه يجنب تكاليف التنفيذ الإضافية التي تسببها عمليات التعليب وفك التعليب كما يوضح المثال التالي:[9]
// التعريف عن الصف العام
public class GenericList<T>
{
void Add(T input) { }
}
class TestGenericList
{
private class ExampleClass { }
static void Main()
{
// تعريف قائمة من النمط الصحيح
GenericList<int> list1 = new GenericList<int>();
// تعريف قائمة من نمط السلسلة المحرفية
GenericList<string> list2 = new GenericList<string>();
// ExampleClass تعريف قائمة من النمط المعرف من قبل المستخدم
GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();
}
}
بالمقارنة مع قوالب سي++ يلاحظ أن أنماط سي# العمومية توفر أماناً أفضل إلا أنها في الوقت ذاته محدودة القدرة[10]، فعلى سبيل المثال ليس من الممكن استخدام الأنماط العمومية كحدود للمعاملات الحسابية.[11]
فيما يلي برنامج بسيط بلغة سي#، وهو إصدار من برنامج أهلاً بالعالم التقليدي:
using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello world!");
}
}
سيقوم هذا البرنامج بطباعة العبارة !Hello World إلى الكونسول. لكل سطر في هذا البرنامج وظيفة معينة:
using System;
يقوم السطر السابق بإخبار المصرف أن يستخدم System
كبادئة مرشحة للاستخدام للأنماط المستخدمة في الكود المصدري. في هذه الحالة عندما يصادف المصرف الكلمة Console
في الأسطر اللاحقة سوف يبحث عن نمط اسمه Console
مبتدئاً عملية البحث في التجميعة (بالإنجليزية: Assembly) الحالية ومن ثم كافة التجميعات الأخرى المشار إليها في البرنامج. سوف يفشل المصرف في هذه الحالة في إيجاد النمط Console
وعندها سيحاول البحث عن نمط اسمه System.Console
مستخدماً System
كبادئة لاسم النمط، وسينجح في إيجاده لأن اسم النمط الكامل هو بالفعل System.Console
. إن الكلمة المفتاحية using
تتيح للمبرمج أن يسرد كافة البوادئ المرشحة للاستخدام أثناء التصريف كبديل عن استخدام الاسم الكامل للنمط.
class Program
يعرّف السطر السابق الصنف Program
. كل ما يوجد ضمن زوج القوسيين التاليين يتبع تعريف Program
.
static void Main()
يعرّف هذا السطر طريقة استاتيكية (خاصة بالصف) يتم استدعاؤها عندما يبدأ البرنامج بالتنفيذ. يستدعي وقت تنفيذ دوت نت (CLR) الطريقة Main
. (ملاحظة: يمكن استدعاء الطريقة Main
كغيرها من الطرق، على سبيل المثال يمكن لطريقة أخرى من الصف Program
استدعاء الطريقة Main
). الكلمة المفتاحية static
تجعل الولوج إلى الطريقة مباشرة دون الحاجة إلى إنشاء كائن من الصف Program
ممكناً. في تطبيقات الكونسول يجب أن تكون الطريقة Main
استاتيكية. لأنه في حال لم تكن استاتيكية عندها سيحتاج البرنامج إلى كائن من الصف Program
، إلا أن إنشاء الكائن سيحتاج برنامجاً يقوم بإنشائه. لحل مشكلة الاعتمادية التبادلية هذه تقوم مصرفات سي# لدى تصريفها تطبيقات الكونسول بإصدار خطأ عند الفشل في إيجاد طريقة Main
استاتيكية. الكلمة المفتاحية void
تعني أن الطريقة Main
لن تقوم بإعادة قيمة.
Console.WriteLine("Hello world!");
يقوم هذا السطر بكتابة خرج (ناتج التنفيذ للبرنامج) البرنامج. إن Console
هو صف (كلاس) استاتيكي موجود في فضاء التسمية (Namespace) System
ويقوم بدور واجهة برمجية إلى المجاري الأساسية (مجرى الدخل ومجرى الخرج ومجرى الخطأ) خاصة بتطبيقات الكونسول. يستدعي البرنامج الطريقة WriteLine
الخاصة بالصف (كلاس) Console
والتي تقوم بإظهار محتوى البارامتر الخاص بها (في هذه الحالة !Hello World) إلى الكونسول في سطر مستقل.
|
|
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.