مقارنة بين لغة سي شارب ولغة فيجوال بيسك دوت نت
تُعد لغتا C# و Visual Basic (.NET) لغتي البرمجة الرئيسيتين المستخدمتين للبرمجة على إطار عمل .NET .
تاريخ اللغة
لغة C# ولغة VB.NET مختلفتان تمامًا من حيث التركيب والتاريخ.
كما يوحي الاسم، فإن بنية لغة C# مبنية على لغة البرمجة C الأساسية التي طورها دينيس ريتشي في مختبرات بيل (AT&T) في سبعينيات القرن الماضي. [ 1 ] تُعدّ جافا و C++ لغتين برمجيتين أخريين مبنيتين أيضاً على بنية لغة C، [ 2 ] لذا فهما تتشابهان في الشكل والمضمون. للمزيد حول هذا الموضوع، راجع مقارنة بين C# وجافا .
تعود جذور لغة BASIC إلى كلية دارتموث . [ 3 ] طُوّرت لغة BASIC (شفرة التعليمات الرمزية متعددة الأغراض للمبتدئين) في ستينيات القرن الماضي كوسيلة للتغلب على صعوبات استخدام لغة التجميع المصممة لأجهزة الحاسوب المركزية والأجهزة ذات المعالجات أو العلامات التجارية المحددة. كان تصميم البرمجة يعتمد على الأجهزة، لأسباب تسويقية في المقام الأول، وليس للحفاظ على البنية المنطقية للبرمجة التي ينبغي أن تتجاوز حدود الأجهزة. (يُعزى نجاح مايكروسوفت في نظام تشغيلها إلى تحرير المستخدمين من الأجهزة الخاصة بالأجهزة من خلال تغليف تلك المهام داخل نظام التشغيل). أصبح الكود "قابلاً للنقل" بفضل المُترجم، وفي الواقع، يستخدم كل من Visual Basic .NET وC# نفس بيئة التشغيل المشتركة (CLR) اليوم. كانت مايكروسوفت وHP مهتمتين بإنشاء لغة قياسية وفقًا لمعيار ISO، وهو الهدف الأصلي، إلا أن HP تخلت عن دعمها، ولم تُصبح لغة ISO الحاسوبية معيارًا دوليًا.
تستمد لغة VB.NET جذورها من لغة BASIC. في بداياتها، استُخدمت BASIC في الأوساط الجامعية كلغة أساسية للتعرف على برمجة الحاسوب، وكان اختصارها يعكس اللغة بدقة. في سبعينيات القرن الماضي، تبنت شركات تصنيع الحواسيب الصغيرة هذه اللغة لاستخدامها كلغة برمجة بسيطة مضمنة في ذاكرة القراءة فقط (ROM)، بالإضافة إلى كونها نظام تشغيل شبه متكامل للتحكم في الإدخال والإخراج. في أوائل ثمانينيات القرن الماضي، تبنت مايكروسوفت اللغة ووسعتها بشكل كبير لتتجاوز هدفها الأصلي، لتصبح لغة/منصة "Visual Basic" التي بيعت طوال تسعينيات القرن الماضي كأداة "تطوير التطبيقات السريع" (RAD) لبرمجة نظام ويندوز. [ 4 ] وقد نافست هذه الأداة مباشرةً أدوات RAD الأخرى في تسعينيات القرن الماضي، مثل PowerBuilder . [ 5 ] على الرغم من نجاح منصة تطوير Visual Basic، فقد توقف دعمها بعد إصدارها السادس (VB6) عندما طرحت مايكروسوفت إطار عمل .NET ومنصة تطوير Visual Studio المرتبطة به في أوائل العقد الأول من الألفية الثانية. في ذلك الوقت، استخدمت مايكروسوفت لغتي C++ وVB6 كأساس للغتين برمجيتين جديدتين في بيئة التطوير المتكاملة (IDE) الجديدة، وهما C# وVB.NET.
في فبراير 2017، أعلنت مايكروسوفت عن نيتها إنهاء استراتيجية "التطوير المشترك" بين اللغتين التي كانت سائدة منذ عام 2010، والسماح لهما بالتطور بشكل مستقل. أصبحت لغة C# الآن لغة التطوير المهيمنة في أنظمة مايكروسوفت. سيلاحظ المطورون أن VB 15 (الذي ظهر لأول مرة في Visual Studio 2017) يفتقر إلى بعض إمكانيات اللغة الموجودة في C# 7.3 الجديدة. [ 6 ]
مقارنة اللغات
على الرغم من الاختلاف الكبير في البنية النحوية بين لغتي C# وVB.NET، إلا أن هذا هو الحد الأقصى للاختلافات. طورت مايكروسوفت هاتين اللغتين لتكونا جزءًا من منصة تطوير .NET Framework. ويتم تطويرهما وإدارتهما ودعمهما من قبل فريق تطوير اللغة نفسه في مايكروسوفت. [ 7 ] تُترجم اللغتان إلى نفس اللغة الوسيطة (IL)، التي تعمل مع مكتبات وقت التشغيل نفسها في .NET Framework. [ 8 ] على الرغم من وجود بعض الاختلافات في بنى البرمجة (الموضحة لاحقًا)، إلا أن الاختلافات بينهما نحوية في المقام الأول، وبافتراض تجنب استخدام مكتبات "التوافق" الخاصة بـ Visual Basic التي توفرها مايكروسوفت لتسهيل التحويل من VB6، فإن لكل أمر تقريبًا في VB أمرًا مكافئًا في C# والعكس صحيح. أخيرًا، تشير كلتا اللغتين إلى نفس الفئات الأساسية في .NET Framework لتوسيع وظائفهما. ونتيجة لذلك، باستثناءات قليلة، يمكن تشغيل برنامج مكتوب بأي من اللغتين من خلال محول نحوي بسيط لترجمته إلى الأخرى. تتوفر العديد من المنتجات مفتوحة المصدر والتجارية لهذا الغرض. تكمن الاختلافات الجوهرية الوحيدة بين اللغتين في تنفيذ الواجهات وفي تعريف الأحداث وإنشائها ومعالجتها. ورغم أن كلتا اللغتين تُعتبران من لغات البرمجة عالية المستوى ، إلا أن VB.NET تحافظ على مستوى تجريد أعلى قليلاً في بعض الجوانب.
دعم متعدد اللغات أثناء التشغيل
كان أحد الأهداف الرئيسية لـ .NET هو دعم لغات متعددة. وكان الهدف من التصميم هو أن تتمتع جميع لغات مايكروسوفت المختلفة بنفس مستوى الوصول إلى جميع ميزات نظام التشغيل ، وأن تكون قادرة على توفير نفس مستوى القوة وسهولة الاستخدام ، وتبسيط استدعاء وحدة نمطية مكتوبة بلغة ما إلى أخرى مكتوبة بلغة أخرى.
من الناحية العملية، تشترك جميع لغات برمجة .NET في نفس محرك وقت التشغيل، وشجرة بناء الجملة المجردة الموحدة ، ولغة الوسيط المشتركة . بالإضافة إلى ذلك، تتمتع جميع لغات .NET بإمكانية الوصول إلى ميزات النظام الأساسي، بما في ذلك جمع البيانات المهملة، والتوريث بين اللغات، ومعالجة الاستثناءات ، وتصحيح الأخطاء . وهذا يسمح بإنتاج نفس الملف الثنائي الناتج من أي لغة برمجة .NET.
بيئة التطوير
يُقدّم Visual Studio اختلافات طفيفة في بيئة التطوير للغتين C# وVB.NET. ومع كل إصدار لاحق من Visual Studio، تقلّصت هذه الاختلافات. فعلى سبيل المثال، كانت الإصدارات الأولى من Visual Studio تُعاني من ضعف دعم ميزة Intellisense في C# مقارنةً بـ Visual Basic .NET، ولم تكن تُوفّر خاصية الترجمة في الخلفية للغة C#. [ 9 ] أما حاليًا، فتتمثّل الاختلافات الرئيسية في بيئات التطوير في الميزات الإضافية لـ Visual Basic .NET التي ظهرت في VB6، ومنها:
- يتم إخفاء مساحة الاسم الافتراضية (ولكن يمكن تعطيلها).
- بعض ملفات المشروع مخفية (يمكن للمستخدم إظهارها)
- تحتوي مساحات الأسماء التي تم إنشاؤها تلقائيًا
My.*على العديد من الاختصارات شائعة الاستخدام التي تم جلبها من VB6، مثل طرق العمل على سجل النظام وملف تكوين التطبيق.
التجميع في الخلفية ميزة في بيئة تطوير Visual Studio ، حيث يتم تجميع الكود أثناء كتابته من قِبل المبرمج بهدف تحديد أخطاء التجميع دون الحاجة إلى إعادة بناء الحل. هذه الميزة متوفرة في Visual Basic منذ .NET 1.1، وكانت موجودة في الإصدارات الأولى من Visual Studio لـ Visual Basic .NET. مع ذلك، يُعد التجميع في الخلفية مفهومًا جديدًا نسبيًا في Visual C#، وهو متوفر مع حزمة الخدمة 1 لإصدار Visual Studio 2008 Standard والإصدارات الأحدث. من أبرز عيوب C# أن لوحة قائمة الأخطاء لا تُحدَّث إلا بعد إعادة بناء الحل. يُصعِّب إعادة هيكلة المشاريع الكبيرة في C# الحاجة إلى إعادة بناء الحل بشكل متكرر لتسليط الضوء على أخطاء التجميع. [ 10 ] لا ينطبق هذا على Visual Basic لأن لوحة قائمة الأخطاء متزامنة مع المُجمِّع في الخلفية.
تُعدّ عملية التجميع في الخلفية أقل استهلاكًا لموارد النظام، مما يُؤدي إلى دورات بناء أسرع. [ 10 ] تُشكّل هذه ميزةً خاصةً في المشاريع الكبيرة، ويمكنها أن تُقلّل بشكلٍ كبيرٍ من الوقت اللازم لبدء تصحيح الأخطاء في بيئة التطوير المتكاملة. [ 10 ]
خصائص اللغة
معظم الاختلافات بين لغتي C# و VB.NET من الناحية التقنية هي اختلافات في بنية اللغة . بمعنى آخر، معظم الميزات موجودة في كلتا اللغتين، لكن بعض الأمور أسهل في إحداهما من الأخرى. وتتمحور العديد من الاختلافات بين اللغتين حول بيئة التطوير المتكاملة (IDE) .
ميزات Visual Basic .NET غير موجودة في C#
- يمكن تعريف المتغيرات باستخدام هذا
WithEventsالتركيب. يتيح هذا التركيب للمبرمج اختيار كائن من القائمة المنسدلة "اسم الفئة" ، ثم اختيار دالة من القائمة المنسدلة "التعريفات" ليتم إدراج توقيع الدالة تلقائيًا. - الربط التلقائي للأحداث. يحتوي VB.NET على
Handlesصيغة للأحداث، تربط معالجات الأحداث بمتغيرات الكائنات بدلاً من الكائنات نفسها. - يتم إطلاق الأحداث باستخدام الكلمة
RaiseEventالمفتاحية، مما يتيح لبيئة التطوير المتكاملة (IDE) عرض قائمة بالأحداث المتاحة للاختيار من بينها.RaiseEventيتحقق هذا الأمر ضمنيًا من وجود أي معالجات أحداث مُفعّلة. (في لغة C#، يُعد إطلاق حدث مطابقًا من الناحية التركيبية لاستدعاء إجراء، ويتطلب سطرًا إضافيًا من التعليمات البرمجية للتحقق من وجود معالجات أحداث مُفعّلة). - لا يلزم تحديد المندوبين للفعاليات، إذ يتم تحديدهم ضمنياً في إعلان الفعاليات.
- الإشارة إلى كائن باستخدام مرجع نقطة غير مؤهل، باستخدام
With ... End Withالبنية - القيم الحرفية في لغة XML [ 11 ]
- إعلانات التاريخ المضمنة، على سبيل المثال
#12/31/2000# Module(على الرغم من أن فئات C# الثابتة لها دلالات إضافية، إلا أنه يجب تعريف كل حقل على حدة كـ static)- يمكن الوصول إلى أعضاء
Modules الذين تم استيرادهم إلى الملف الحالي بدون أي وصول حاوية مسبق [ 12 ] - مساحة
Myالاسم. [ 13 ] - كانت مكونات COM وقابلية التشغيل البيني أكثر قوة في VB.NET، حيث يتم ربط نوع Object في وقت التشغيل؛ [ 14 ] ومع ذلك، أضافت C# 4.0
dynamicالنوع، الذي يعمل كشكل مرتبط متأخرًا من Object - يمكن استيراد مساحات الأسماء على مستوى المشروع، بحيث لا يلزم استيرادها في كل ملف على حدة، كما هو الحال في لغة C#
- تعريف ثوابت المترجم الشرطية
- قد تأخذ طرق الخصائص معلمات
- يمكن تمرير الخصائص إلى الدوال باستخدام
ByRefالمعاملات (refparameters في لغة C#). في لغة C#، عليك كتابة ثلاث تعليمات إضافية: تعريف متغير، نسخ قيمة الخاصية إلى المتغير، ثم نسخ قيمة المتغير إلى الخاصية بعد استدعاء الدالة. Enumيمكن تعريف s داخل الواجهاتCaseقد تحتوي العبارات على تعابير عدم المساواة، مثلIs >= 3. (في لغة C#، يمكن محاكاة ذلك باستخدام عباراتElseAND المتداخلةIf). وهي مدعومة الآن في لغة C# 8.0.Overloadsتُحدد الكلمة المفتاحية `this` أن خاصية أو إجراءً ما يُعيد تعريف خاصية أو إجراء واحد أو أكثر موجودين بنفس الاسم ضمن نفس الفئة أو الفئة الأساسية. (قد يؤدي عدم وجود هذه الكلمة المفتاحية في لغة C# إلى تحميل زائد غير مقصود).Implementsتُستخدم الكلمة المفتاحية لتحديد الواجهات التي يُنفذها عضو في فئة. يوجد في لغة C# صيغة مشابهة، لكنها اختيارية ولا يمكن تطبيقها إلا إذا كان العضو يُنفذ واجهة واحدة فقط.Likeيُتيح هذا المعامل مقارنة أنماط السلاسل النصية بطريقة أبسط بكثير من استخدام التعابير النمطية. (في لغة C#، يتوفر نفس المعامل باستخدام الدالة Microsoft.VisualBasic.CompilerServices.LikeOperator.LikeString، ولكن ليس ككلمة مفتاحية سهلة الاستخدام في اللغة).Returnلا يُشترط وجود عبارة. يمكن أيضًا إرجاع القيمة عن طريق إسنادها إلى الدالة.- يحتوي Visual Basic على ثوابت مدمجة مثل
vbCrLfوvbTab - لا
outيوجد مُعدِّل للمعاملات، لأنه في لغة VB يتم تهيئة جميع المتغيرات تلقائيًا. - تتصرف الكلمة
MyClassالمفتاحية كمتغير كائن يشير إلى النسخة الحالية من فئة كما تم تنفيذها أصلاً.MyClassوهي مشابهة لـMe، ولكن يتم التعامل مع جميع استدعاءات الأساليب عليها كما لو كان الأسلوب غير قابل للتجاوز. MyBase.Newيُستخدم لاستدعاء مُنشئ الفئة الأساسية بشكل صريح من مُنشئ الفئة المشتقة.- توفر هذه
Myالميزة وصولاً سهلاً وبديهياً إلى عدد من فئات .NET Framework، مما يتيح لمستخدم Visual Basic التفاعل مع الكمبيوتر والتطبيق والإعدادات والموارد وما إلى ذلك. - يتم تهيئة المتغيرات المحلية (أي المتغيرات المعلنة داخل إجراء) تلقائيًا.
- يمكن تعريف المتغيرات المحلية باستخدام
Staticالمُعدِّل للحفاظ على قيمتها بين استدعاءات الإجراء. - يُتيح هذا
Defaultالتصريح استخدام فهرس للخاصية، مما يسمح باستخدام صيغة مختصرة لاسترجاع المجموعاتMyCollection(5). يحتوي C# على بنية مشابهة، حيث يُعاد استخدام الكلمة المفتاحيةthisكاسم للخاصية. يمكن تعريف عدة فهارس باستخدام مفاتيح من أنواع مختلفة، مثل `var`MyCollection(5)أو `var`MyCollection("Bob"). - تفتقر لغة C#
DirectCastإلى (الربط بتعليمات CLR واحدة)، ويمكن تحقيق تحويل النوع الصارم بواسطةasالمعامل الذي يتضمن حماية إضافية من أخطاء وقت التشغيل. - تفتقر لغة C# إلى
Endالعبارة التي تُنهي التطبيق بشكل مفاجئ. - الاستدلال باستخدام تعابير لامدا
Dim x = Function(n As Integer) n + 1
ميزات لغة C# غير موجودة في Visual Basic .NET
- استخدام بنية المرجع C# في VB.NET : يمكن العثور على معلومات مفصلة، على سبيل المثال هنا : https://www.vbforums.com/showthread.php?889867-Use-C-ref-struct-in-VB-NET-Today-And-vote-against-preventing-this-in-Roslyn
- التعليقات متعددة الأسطر. في لغة VB، يتم التعامل مع هذا الأمر في محرر بيئة التطوير المتكاملة Visual Studio، الذي يضيف علامات التعليق إلى التحديدات.
- الفئات الثابتة (الفئات التي لا يمكن أن تحتوي على أي أعضاء غير ثابتة، على الرغم من أن وحدات VB.NET هي في الأساس فئات ثابتة ذات دلالات إضافية)
- يمكن استخدام
checkedالسياقاتuncheckedللتحكم الدقيق في فحص تجاوز/نقص البيانات - يمكن أن تحتوي حلقات التكرار من نوع for على شروط متعددة، مثل
for(int i = 0; i < 10 && somethingTrue; i++). هذا إرث من لغة C، حيث أنforالعبارة هي في الأساس اختصار برمجيwhileلعبارة أخرى. - قد تُطبّق دالتا الوصول والتعديل لخاصية ما واجهات منفصلة. في لغة VB، سيتعين عليك تعريف خاصيتين بدلاً من ذلك: خاصية للقراءة فقط تُطبّق إحدى الواجهات، وخاصية للكتابة فقط تُطبّق الواجهة الأخرى.
- تنفيذ الواجهة الضمنية
- يمكن استخدام عامل الدمج (coalesce)
??لإرجاع أول قيمة غير فارغة (مثال: تُرجع ). أما في VB.NET، فيجب استخدام الدالة بمعاملين - مثال: تُرجع .null ?? null ?? 11IfIf(Nothing, If(Nothing, 1))1 - المؤشرات (في السياق غير الآمن)
- عامل الشرط ؟: . سيتعين على VB.NET استخدام الدالة بثلاثة معلمات - أي .
(someThingTrueOrFalse) ? whenTrue() : whenFalse();IfIf(someThingTrueOrFalse, whenTrue(), whenFalse())
خصائص أخرى لـ Visual Basic .NET لا تنطبق على C#
- قد ينتج عن تحويل القيمة المنطقية "صحيح" إلى عدد صحيح القيمة -1 أو 1، وذلك حسب نوع التحويل المستخدم.
- يستخدم تعيين المتغيرات ومقارنتها نفس الرمز المميز:
=. بينما في لغة C#، توجد رموز مميزة منفصلة،==للمقارنة ولتعيين=قيمة. - لا تُعتبر مُعرّفات VB.NET حساسة لحالة الأحرف.
- عند إسناد قيمة لمتغير من نوع بيانات مختلف (مع
Option Strictتعطيل خيار "التحويل التلقائي")، يقوم VB.NET بتحويل القيمة تلقائيًا إن أمكن. قد يؤدي هذا التحويل التلقائي أحيانًا إلى نتائج غير متوقعة، على سبيل المثال:
Dim i As Integer = "1" 'يقوم المترجم تلقائيًا بتحويل السلسلة النصية إلى عدد صحيح Dim j As String = 1 'يقوم المترجم تلقائيًا بتحويل العدد الصحيح إلى سلسلة نصية If i = j Then 'يقوم المترجم بالتحويل والمقارنة بين i و j MsgBox ( "تجنب استخدام هذا النوع، ولكن ستظهر هذه الرسالة!" ) End Ifعلى الرغم من أن الإعداد الافتراضي هو Option Strictإيقاف تشغيل هذه الميزة لأسباب تتعلق بالتوافق مع الإصدارات السابقة، إلا أن مايكروسوفت توصي بتفعيلها [ 15 ] ويعتبر ذلك ممارسة جيدة على نطاق واسع Option Strict، نظرًا لأنها تزيد من أداء التطبيق وتقلل من احتمالية حدوث أخطاء في التسمية وأخطاء برمجية أخرى. [ 16 ]
Val()دالة تقوم أيضًا بتحليل القيمة الفارغة أثناء تحويلها إلى نوع double (في لغة c#،Convert.ToDouble()تُستخدم لتحويل أي كائن إلى قيمة من نوع double، ولكنها تُطلق استثناءً في حالة القيمة الفارغة).- CInt، CStr، CByte، CDbl، CBool، CDate، CLng، CCur، CObj، بالإضافة إلى مجموعة واسعة من دوال التحويل المدمجة في اللغة.
خصائص أخرى للغة C# لا تنطبق على Visual Basic .NET
- افتراضيًا، لا يتم التحقق من العمليات الحسابية. ينتج عن ذلك سرعة تنفيذ أعلى قليلًا، ولكن مع احتمال عدم اكتشاف تجاوزات الأعداد. مع ذلك، يمكن للمبرمج وضع العمليات الحسابية في سياق مُتحقق منه لتفعيل التحقق من التجاوزات. (يمكن القيام بذلك في فيجوال بيسك بتحديد خيار معين).
- معرفات لغة C# حساسة لحالة الأحرف.
- لتعيين نفس القيمة لمتغيرات متعددة، يمكنك استخدام
a=b=c.
مقارنات بناء الجملة
في لغة Visual Basic .NET، تُنهي كتلة التعليمات البرمجية بعبارات (أو عبارات، في حالة حلقة for ) مألوفة أكثر للمبرمجين ذوي الخبرة في استخدام T-SQL . أما في لغة C#، فتُستخدم الأقواس المعقوفة (، ) لفصل الكتل، وهو أمر مألوف أكثر للمبرمجين ذوي الخبرة في لغات أخرى واسعة الانتشار مثل C++ و Java . بالإضافة إلى ذلك، في C#، إذا كانت الكتلة تتكون من عبارة واحدة فقط، فيمكن حذف الأقواس المعقوفة.End BlockNameNext{}
لغة C# حساسة لحالة الأحرف، بينما لغة Visual Basic .NET ليست كذلك. لذا، في C#، من الممكن وجود متغيرين يحملان نفس الاسم الظاهري، على سبيل المثال `input` variable1و`input` Variable1. يقوم Visual Studio بتصحيح حالة الأحرف (توحيدها) للمتغيرات كما هي مكتوبة في VB.NET. مع ذلك، قد تكون حساسية حالة الأحرف مفيدة في بعض الحالات. عادةً ما يكتب مبرمجو C# أسماء الأنواع والأعضاء بأحرف كبيرة، بينما يتركون أسماء الحقول والمتغيرات بأحرف صغيرة. هذا يسمح، على سبيل المثال، بتسمية وسائط الدوال بشكل طبيعي إلى حد ما: `input` public int CalculateOrders(Customer customer). لكن هذا قد يسبب مشاكل لمن يحولون كود C# إلى لغة غير حساسة لحالة الأحرف، مثل Visual Basic، أو لمن لم يعتادوا قراءة لغة حساسة لحالة الأحرف.
الكلمات المفتاحية
لا تُميّز لغة Visual Basic بين الأحرف الكبيرة والصغيرة، مما يعني أن أي تركيبة من الأحرف الكبيرة والصغيرة في الكلمات المفتاحية مقبولة. يقوم Visual Studio تلقائيًا بتحويل جميع كلمات Visual Basic المفتاحية إلى صيغها الافتراضية المكتوبة بأحرف كبيرة، مثل "Public" و"If".
لغة C# حساسة لحالة الأحرف، وجميع الكلمات الرئيسية في C# مكتوبة بأحرف صغيرة.
تشترك لغتا Visual Basic و C# في معظم الكلمات الرئيسية، مع اختلاف يتمثل في أن الكلمات الرئيسية الافتراضية في Visual Basic هي النسخ المكتوبة بأحرف كبيرة من الكلمات الرئيسية في C#، على سبيل المثال Publicvs publicو Ifvs.if
توجد بعض الكلمات المفتاحية بإصدارات مختلفة تمامًا في لغتي Visual Basic و C#:
Friendمقابلinternal- مُعدِّلات الوصول التي تسمح بالرجوع بين الفئات ولكن ليس بين التجميعات، باستثناء التجميعات الصديقة.Meمقابلthis- إشارة ذاتية إلى مثيل الكائن الحاليMustInheritvsabstract- يمنع إنشاء مثيل مباشر للفئة، ويجبر المستخدمين على إنشاء مراجع كائنات للفئات المشتقة فقط.MustOverrideمقابلabstract- لإجبار الفئات المشتقة على تجاوز هذه الطريقةMyBaseمقابلbase- للإشارة إلى الفئة الأساسية التي اشتُقت منها الفئة الحاليةNotInheritableمقابلsealed- لتعريف الفئات التي لا يمكن توريثهاNotOverridableمقابلsealed- لتعريف الطرق التي قد لا يتم تجاوزها بواسطة الفئات المشتقةOverridablevsvirtual- يُعلن عن إمكانية تجاوز طريقة ما في الفئات المشتقةOverridesمقابلoverride- لتمييز طريقة افتراضية على أنها متجاوزةSharedمقابلstatic- لتعريف الطرق التي لا تتطلب نسخة صريحة من كائن
تُشير بعض الكلمات المفتاحية في لغة C#، مثل `_`، sealedإلى معانٍ مختلفة عند تطبيقها على الدوال مقارنةً بتطبيقها على تعريفات الفئات. أما في لغة VB.NET، فتُستخدم كلمات مفتاحية مختلفة لسياقات مختلفة.
تعليقات
| سي شارب | فيجوال بيسك دوت نت |
|---|---|
// تعليق من سطر واحد/* تعليق متعدد الأسطر السطر 2 السطر 3 *//// تعليق سطر واحد في XML/** تعليق متعدد الأسطر في XML السطر 2 السطر 3 */#if COMMENT تعليق متعدد الأسطر عبر المعالجة المسبقة السطر 2 السطر 3 #endif | تعليق من سطر واحد''' تعليق السطر الأول في XML ''' تعليق السطر الثاني في XML ''' تعليق السطر الثالث في XMLتعليق REM#إذا كان هناك تعليق ، فقم بإنشاء تعليق متعدد الأسطر عبر المعالجة المسبقة للسطر 2 والسطر 3 #نهاية الشرطالتعليقات داخل السطر غير متاحة |
الشروط
| سي شارب | فيجوال بيسك دوت نت |
إذا ( كان الشرط صحيحًا ) { // الشرط صحيح } وإلا إذا ( كان الشرط الآخر صحيحًا ) { // الشرط خاطئ والشرط الآخر صحيح } وإلا { // الشرط والشرط الآخر خاطئان } | إذا تحقق الشرط ، فإن الشرط صحيح. وإلا، إذا تحقق الشرط الآخر ، فإن الشرط خاطئ والشرط الآخر صحيح. وإلا ، فإن الشرط والشرط الآخر خاطئان . |
الحلقات
| سي شارب | فيجوال بيسك دوت نت |
for ( int i = 0 ; i < number ; ++ i ) { // حلقة تكرارية من الصفر إلى عدد أقل بواحد من number } | For i As Integer = 0 To number - 1 ' حلقة تكرارية من الصفر إلى أقل من رقم بواحد Next |
for ( int i = number ; i >= 0 ; --i ) { // حلقات تكرارية من الرقم إلى الصفر } | For i As Integer = number To 0 Step - 1 ' تكرار من number إلى الصفر Next |
for ( int i = 0 ; i <= 20 ; i += 2 ) { // تكرار من 0 إلى 20 بزيادة قدرها 2 } | For i As Integer = 0 To 20 Step 2 ' تكرار من 0 إلى 20 بزيادة قدرها 2' Next |
break ; // يخرج من حلقة تكرارية | الخروج من حلقة forالخروج من حلقة while: 'يخرج من حلقة while'الخروج من حلقة التكرار 'يُنهي حلقة التكرار' |
المقارنات
الأنواع الأولية
| سي شارب | فيجوال بيسك دوت نت | |
إذا كان ( أ == ب ) { // متساويان } | إذا كان a = b، فإن ' يساوي نهاية الشرط | |
إذا ( أ != ب ) { // غير متساويين }أو: إذا لم يكن ( أ == ب ) { // غير متساويين } | إذا كان a <> b، فإن 'لا يساويان ' .أو: إذا لم يكن a = b، فهذا يعني أنهما غير متساويين . | |
إذا كان ( أ == ب و ج == د | هـ == و ) { // عوامل منطقية غير مختصرة } | إذا كان a = b و c = d أو e = f، فإن عوامل التشغيل المنطقية غير المختصرة تُنهي الشرط. | |
إذا كان ( أ == ب && ج == د || هـ == و ) { // اختصار عوامل التشغيل المنطقية } | إذا كان a = b و c = d أو e = f، فإنّ ' اختصار عوامل التشغيل المنطقية' . | |
أنواع الكائنات
| سي شارب | فيجوال بيسك دوت نت |
إذا كان ( object.ReferenceEquals ( a , b ) ) { // تشير المتغيرات إلى نفس النسخة } | إذا كان a هو b، فيمكن كتابة ذلك أيضًا على النحو التالي: إذا كان Object.ReferenceEquals(a, b) فإن المتغيرات تشير إلى نفس النسخة . |
if ( ! object . ReferenceEquals ( a , b )) { // المتغيرات لا تشير إلى نفس النسخة } | إذا لم يكن a هو b ، فإن المتغيرات لا تشير إلى نفس الحالة . |
إذا كان ( أ == ب ) { // الحالتان متكافئتان } | إذا كان a = b، فإن الحالتين متكافئتان . |
إذا ( أ != ب ) { // غير متكافئين } | إذا كان a <> b، فهذا يعني أنهما غير متكافئين . |
var type = typeof ( int ); | Dim type = GetType ( Integer ) |
إذا كان ( أ هو ب ) { // أنواع أ و ب متوافقة } | إذا كان نوع a هو b، فإن نوعي a و b متوافقان . |
إذا لم يكن (أ هو ب ) { // أنواع أ و ب غير متوافقة } | إذا لم يكن نوع a هو b، فإن نوعي a و b غير متوافقين . |
التبني والدعم المجتمعي
تتمتع كل من لغتي C# وVB.NET بمعدلات استخدام عالية، ومجتمعات مطورين نشطة للغاية، وتدعم مايكروسوفت كلا المجتمعين بشكل كامل. يستخدم مطورو إطار عمل .NET لغتي VB.NET وC# على نطاق واسع كلغتين أساسيتين. [ 17 ] [ 18 ] ومع ذلك، تتمتع لغة C# بنشاط مجتمعي أكبر على الإنترنت، وتتوفر لها كتب أكثر. قد يشير هذا إما إلى زيادة استخدام لغة C# أو إلى حاجة المستخدمين إلى مزيد من الدعم فيها.
تشمل أمثلة تبني المجتمع والصناعة ما يلي:
- أظهر مؤشر مجتمع البرمجة TIOBE لشهر يوليو 2010 أن لغة C# تفوقت على لغة Visual Basic [ 19 ].
- يُظهر مؤشر مجتمع البرمجة TIOBE أن VB.NET تفوقت على C# في عام 2018 [ 20 ]
- ذكر سكوت ويلتاموث، المصمم الأصلي للغة C#، في مدونة نشرها في مارس 2010 أن "الأرقام الأكثر موثوقية التي لدينا ... تُظهر اعتمادًا متساويًا تقريبًا" للغة VB.NET و C#. [ 17 ]
- كشف استطلاع رأي أجرته مؤسسة فورستر للأبحاث عام 2007 أن 59% من مطوري .NET يستخدمون VB.NET فقط لإنشاء البرامج. [ 18 ]
- يُعد Visual Basic Express البرنامج الأكثر تحميلاً من بين جميع برامج Visual Studio Express . [ 21 ]
- وفقًا لاستطلاع أجرته مجلة Visual Studio في نوفمبر 2007 ، قال 41 بالمائة إنهم يستخدمون لغة C#، و34 بالمائة يبرمجون بلغة VB.NET، بينما أجاب 25 بالمائة بـ "أخرى". [ 21 ]
- أفاد ستيفن وايلي ، مدير منتجات التسويق في شركة Apress، أن "كتب C# تتفوق في المبيعات على كتب VB.NET بسهولة، بنسبة تتراوح بين 2 إلى 1 و 3 إلى 1." [ 21 ]
- يحتوي موقع مدونات MSDN ، وهو موقع التدوين الخاص بموظفي مايكروسوفت، على 770,000 منشور تناقش لغة C#، بينما يذكر 378,000 منشور فقط لغة VB.Net (اعتبارًا من 4 فبراير 2016).
- تُظهر مجموعة جوجل ، وهي محرك بحث Usenet ، 35,200,000 نتيجة للبحث عن "VB .Net"، و244,000,000 نتيجة للبحث عن "C#" (اعتبارًا من 4 فبراير 2016).
- أظهر استطلاع رأي المستخدمين لمطوري Stack Overflow لعام 2018 أن 35% من المطورين المحترفين يستخدمون لغة C# بينما يستخدم 6.9% فقط لغة VB.NET. [ 22 ]
لغات أخرى
C++/CLI (المعروفة سابقًا باسم Managed C++)
لا تحظى لغة C++/CLI (بديل Managed Extensions for C++ ) بنفس معدل انتشار لغتي C# أو VB.NET، ولكنها تحظى بشعبية كبيرة. تُعد C++/CLI الأقرب إلى C# من حيث التركيب والأسلوب والمضمون. ومع ذلك، تبقى C++/CLI أقرب إلى جذورها في C++ من C#. تدعم C++/CLI بشكل مباشر المؤشرات، والمدمرات، ومفاهيم البرمجة غير الآمنة الأخرى غير المدعومة أو المحدودة في اللغات الأخرى. كما تتيح الاستخدام المباشر لكل من كود .NET وكود C++ القياسي. تُستخدم C++/CLI لنقل تطبيقات C++ الأصلية/القديمة إلى إطار عمل .NET، أو في الحالات التي يرغب فيها المبرمج بالتحكم بشكل أكبر في الكود؛ ولكن هذا التحكم يأتي على حساب سهولة الاستخدام وقابلية القراءة. تعاني العديد من الأدوات الآلية المرفقة مع Visual Studio من انخفاض في وظائفها عند التعامل مع كود C++. ويعود ذلك إلى أن تقنية الانعكاس لا توفر نفس القدر من المعلومات حول الكود كما هو الحال مع C# وVB.NET.
J#
يحتل J# المرتبة الرابعة بفارق كبير في تبني بيئة .NET. صُممت J# أساسًا لتسهيل انتقال تطبيقات Java إلى إطار عمل .NET؛ فهي تتيح للمطورين ترك معظم أكواد Java أو J++ دون تغيير مع استمرار تشغيلها ضمن إطار عمل .NET، مما يسمح لهم بنقل أجزاء صغيرة منها إلى لغة .NET أخرى، مثل C#، بشكل منفصل. لا تتلقى J# نفس مستوى التحديثات التي تتلقاها اللغات الأخرى، ولا تحظى بنفس مستوى الدعم المجتمعي. على سبيل المثال، يدعم نظام فريق Visual Studio 2005 التوليد التلقائي لاختبارات الوحدة في C# وVB.Net وC++، ولكنه يستثني J#. تم إيقاف دعم J# ولم تعد مُضمنة في Visual Studio 2008 أو الإصدارات الأحدث، نظرًا لأن مجموعة ميزات J# الحالية تلبي احتياجات العملاء إلى حد كبير، ولأن استخدام J# آخذ في التراجع.
لغات .NET إضافية
تُترجم جميع لغات .NET إلى لغة وسيطة مشتركة (CIL)، تحتوي على بيانات وصفية غنية، وتُعادل وظيفيًا ومنطقيًا كود لغة .NET الأصلي. ولهذه الأسباب، على الرغم من إمكانية البرمجة مباشرةً بلغة CIL، إلا أن ذلك نادرًا ما يحدث. يسمح تكافؤ CIL مع كود لغة .NET لأدوات مثل .NET Reflector بتحويل تجميعة .NET إلى كود مصدري مطابق تقريبًا للكود المصدري الأصلي. غالبًا ما تُستخدم أدوات إخفاء الكود للحماية من ذلك، وتعمل هذه الأدوات عن طريق تعديل CIL للتجميعة مباشرةً لجعل فك ترجمتها إلى لغة .NET ذات مستوى أعلى أمرًا صعبًا أو مستحيلاً.
مراجع
- ↑ ريتشي، دينيس (أبريل 1993). التاريخ (تقرير). مختبرات بيل. مؤرشف من الأصل في 3 فبراير 2015. تم الاطلاع عليه في 18 أغسطس 2013 .
- ↑ "تاريخ لغة برمجة جافا" . Freejavaguide.com . تم الاطلاع عليه بتاريخ 18 أغسطس 2013 .
- ↑ "برنامج BASIC في دارتموث"
- ↑ "نشأة لغة فيجوال بيسك" . Forestmoon.com . تاريخ الاسترجاع: 18 أغسطس 2013 .
- ↑ "تاريخ باور سوفت، تاريخ باور بيلدر" . Lannigan.org . تم الاطلاع عليه بتاريخ 18-08-2013 .
- ↑ "استراتيجية لغة .NET" . فبراير 2017.
- ↑ كريل، بول (27 فبراير 2009). "مايكروسوفت تدمج لغات البرمجة | عالم المطورين" . إنفوورلد . تم الاطلاع عليه بتاريخ 18 أغسطس 2013 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ "لغة مايكروسوفت الوسيطة" . Dotnet-guide.com . تم الاطلاع عليه بتاريخ 18-08-2013 .
- ↑ ماثيو غيرتز. "التوسع: مُجمِّع الخلفية شديد الانشغال" . مجلة MSDN . مؤرشف من الأصل بتاريخ 19 فبراير 2008. تم الاطلاع عليه بتاريخ 16 ديسمبر 2008 .
- 1 2 3 "نظام ومنهجية توفر إعادة هيكلة بمساعدة المترجم" . Freepatentsonline.com . تم الاطلاع عليه بتاريخ 24 فبراير 2015 .
- ↑ جوناثان ألين. "هل تحتاج لغة C# إلى صيغ XML الحرفية في VB9؟" . تم الاطلاع عليه بتاريخ 13 يناير 2009 .
- ↑ "خاصية DateAndTime.Now (Microsoft.VisualBasic)" . Msdn.microsoft.com. 2015-02-18 . تم الاطلاع عليه بتاريخ 2015-02-24 .
- ↑ "التطوير باستخدام My (Visual Basic)" . Msdn.microsoft.com. 2015-02-18 . تم الاطلاع عليه بتاريخ 2015-02-24 .
- ↑ "الربط المبكر مقابل الربط المتأخر" . Visualbasic.about.com. مؤرشف من الأصل بتاريخ 25 فبراير 2015. تم الاطلاع عليه بتاريخ 24 فبراير 2015 .
- ↑ "عبارة Option Strict" . Msdn.microsoft.com. 2015-02-18 . تم الاطلاع عليه بتاريخ 2015-02-24 .
- ↑ GetDotNetCode.com: "Option Strict On" . Getdotnetcode.com. مؤرشف من الأصل بتاريخ 13 مارس 2012. تم الاطلاع عليه بتاريخ 24 فبراير 2015 .
- 1 2 "التطور المشترك بين VB و C#" . MSDN . تم الاطلاع عليه بتاريخ 27-03-2010 .
- 1 2 "Mono يجلب برامج Visual Basic إلى Linux" . Linux-Watch . تم الاسترجاع في 25 مارس 2010 .
{{cite web}}: CS1 maint: deprecated archiveal service ( link ) - ↑ «لغة C# تُصنّف أعلى من لغة Visual Basic لأول مرة في التاريخ» . Tiobe.com . تاريخ الاطلاع: 24 فبراير 2015 .
- ↑ "مؤشر TIOBE" . TIOBE.com: شركة جودة البرمجيات . تم الاطلاع عليه بتاريخ 27-03-2019 .
- 1 2 3 باتريك ميدر. "الانتشار المتزايد للغة سي شارب" . مجلة فيجوال ستوديو ، نوفمبر 2007. مؤرشف من الأصل بتاريخ 20 أبريل 2008. تم الاطلاع عليه بتاريخ 16 ديسمبر 2008 .
- ↑ "استطلاع رأي مطوري ستاك أوفرفلو لعام 2018" . ستاك أوفرفلو . تم الاطلاع عليه بتاريخ 22 أبريل 2018 .
روابط خارجية
- مقارنة تفصيلية للغات مايكروسوفت فيجوال ستوديو
- مكافئات لغات مايكروسوفت فيجوال ستوديو 2003-2010
- برمجة مايكروسوفت VSTO باستخدام فيجوال بيسك مقابل سي شارب
- مقارنة بين CodeProject VB و C#
- الاختلافات النحوية بين لغة C# ولغة VB.NET
- .شبكة
- عائلة لغات البرمجة الأساسية
- عائلة لغات البرمجة C
- مقارنة لغات البرمجة الفردية
