مقایسه سی‌شارپ و ویژوال بیسیک دات‌نت

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
Translation arrow fa.svg این نوشتار یک ترجمه از ویکی‌پدیاهای دیگر است. پيوند به سایر زبان‌ها را در سمت راست-پايين اين صفحه ببينيد.

عنوان صحیح این مقاله مقایسه سی شارپ و ویژوال بیسیک دات نت (به انگلیسی: Comparison of C# and Visual Basic .NET)می باشد. جانشینی و حذف علامت # در عنوان مقاله، بعلت محدودیت های فنی می باشد.

سی شارپ و ویژوال بیسیک دو زبان ابتدایی اند که برای برنامه نویسی روی چهار چوب دات نت استفاده می شوند.

سازگاری زبان[ویرایش]

نحو سی شارپ شبیه جاوا می باشد.دو زبان سی شارپ و ویژوال بیسیک دات نت ار ساختارهایی شبیه به دیگر زبان های سطح بالای جدید مثل جاوا و سی شارپ بهره می برند.هر چند جاوا و دات نت بی شمار است در نتیجه ما می توانیم آنها را در مقایسه جاوا و سی شارپ مشاهده کنیم.

پشتیبانی چند زبانی زمان اجرا[ویرایش]

یکی از اهداف اصلی دات نت پشتیبانی چند زبانی زمان اجرا می باشد.قصد این طراحی این بود که همه ی زبان های مختلف ماکروسافت باید سطح دسترسی یکسانی به تمام ویژگی های سیستم عامل داشته باشد،باید قادر به نمایش دادن سطح یکسانی از توان و قابلیت استفاده و آسان تر کردن باشد که بوسیله یک ماژول در یک زبان بر حسب آنکه در زبانی دیگر نوشته شده است فراخوانی می شود . در پیاده سازی ، همه ی زبان های دات نت از موتور زمان اجرای یکسان ودرخت نحو مجرد یک شکل و زبان میانه رایج بهره می برد.بعلاوه همه زبان های دات نت به ویژگی های پایگاه شامل زباله روبی ، پیوند دادن به زبان وراثتی ، مدیریت اثتثناء و اشکال زدایی دسترسی دارند. این اجازه می دهد که خروجی یکسان باینری بوسیله هر زبان برنامه نویسی دات نت تولید شود.

توسعه محیط[ویرایش]

ویژوال استادیو تفاوت های کمتری در توسعه محیط برای سی شارپ و ویژوال بیسیک دات نت فراهم می آورد. پس از انتشار هر نسخه ویژوال استادیو ، تفاوت بین توسعه محیط ها برای این ربان ها کاهش می یابد.مثلآ نسخه های اولیه ویژوال استادیو دارای حمایت ضعیف برای Intelesens در سی شارپ در مقایه با ویژوال بیسیک دات نت داشت و هیچ سابقه ی ارائه ی کامپایل برای سی شارپ نداشت. در همان حال ، تفاوت های اصلی ای در توسعه ی محیط با اضافه کردن ویژگی هایی برای ویژوال بیسیک دات نت بوجود آمد که در ویژوال بیسیک 6 شامل موارد زیر است :

  • فضای نامِ پیش فرض، مخفی است.(اما می تواند از کار انداخته شود.)
  • برخی از فایل های پروژه مخفی است.(کاربر می تواند آنها را نشان دهد.)

سابقه ویرایش یک ویژگی محیط برنامه نویسی ویژوال استادیو می باشد که بموجب آن کد نوشته شده توسط برنامه نویس با هدف شناسایی خطا بدون نیاز به ساخت راه حل هم زمان کامپایل می شود. این ویژگی برای ویژوال بیسیک از دات نت 1.1 فراهم آمده است و در نسخه های ابتدایی ویژوال استادیو برای ویژوال سی شارپ عرضه شده است و در سرویس پک 1 برای نسخه های استاندارد و بالاتر قابل استفاده است. یک ایراد سی شارپ این است که پنل فهرست خطا تا زمانی که راه حل بازسازی نشود بروز رسانی نمی شود. Refactoring پروژههای بزرگ در سی شارپ بوسیله اغلب نیازها به بازسازی راه حل به منظور برجسته کردن اشتباهات کامپایل دشوار تر است. چنین موردی در ویژوال بیسیک وجود ندارد زیرا پنل فهرست خطا با پس زمینه کامپایلر هماهنگ شده است. سابقه و هدف کامپایل کمتر خواستار سریع تر ساختن چرخه در منابع سیستم و نتیجه می باشد.این یک ویژگی برای پروژه های بزرگ است که می توان به میزان قابل توجهی زمان مورد نیاز برای شروع اشکال زدایی محیط توسعه مجتمع را کاهش داد.

ویژگی های زبان[ویرایش]

بخش عمده ای از تفاوت بین سی شارپ و ویژوال بیسیک از نظر فنی نحو آنها است.به این معنا که بسیاری از ویژگی ها در هر دو زبان هستند ، اما بعضی چیز ها ساده تر در یک زبان نسبت به دیگری انجام می شود. در واقع بسیاری از تفاوت های بین دو زبان در اطراف محیط برنامه نویسی متمرکز شده است.

ویژگی هایی از ویژوال بیسیک دات نت که در سی شارپ یافت نمی شود[ویرایش]

  • متغیرها میتوانند توسط ساختار WithEvents تعریف شوند.
  • ویژوال بیسیک نحو Handles را برای رویدادها داراست.
  • XML واقعي
  • اعلام تاریخ با استفاده از نحو #1/1/2000#.(M/dd/yyyy)
  • ماژول(اگر چه سی در شارپ کلاس استاتیک با معانی دیگر مهر و موم شده است، اما هر رشته به صورت جداگانه را می توان به عنوان استاتیک اعلام کرد.)‌
  • فضای نام

ویژگی هایی از سی شارپ که در ویژوال بیسیک دات نت یافت نمی شود[ویرایش]

  • بلوک های کد نا امن (مثل سی + + / فناوری دات نت)از طریق کلمه کلیدی unsafe اعطاء می شود.
  • ‌واسط جزئی
  • تکرارکننده و کلمه کلیدی yield
  • توضیحات چند خطی(توجه داشته باشید که محیط برنامه نویسی ویژوال استودیو ازتوضیحات چند خطی برای ویژوال بیسیک دات نت پشتیبانی می کند.)
  • کلاس های ایستا(کلاس هایی که نمی توانند دارای عضو های غیر ثابت باشند،هر چند ماژول های ویژوال بیسیک اساسا کلاس های استاتیک را با معانی دیگر مهر و موم می کند.)
  • می تواند از مفاهیم checked و unchecked برای کنترل دقیق سرریز وچک کردن پاریز استفاده شود.

دیگر ویژگی های ویژوال بیسیک دات نت که قابل اجرادر سی شارپ نمی باشد[ویرایش]

  • تبدیل بولی ارزش واقعی به صحیح ممکن است از -1 و یا 1 بسته به تبدیل استفاده کند.
  • برای مقدار دهی و مقایسه متغيير ها از نماد یکسان = استفاده می شود.در حاليكه سی شارپ نماد ها را جدا می کند،== برای مقایسه و = برای مقدار دهی متغیر.
  • ویژوال بیسیک دات نت به بزرگ وکوچک بودن حروف حساس نیست.
  • به طور پیش فرض چک کردن نوع در آن شدید نیست.اگر آن به طور پیش فرض در سمت چپ محل باشد، بطور خودکار نوع بدون اطلاع برنامه نویس تبدیل خواهد شد، برای مثال:
Dim i As Integer = "1" 'Compiler automatically converts String to Integer
Dim j As String = 1 'Compiler automatically converts Integer to String
If i = j Then 'Compiler does cast and compare between i and j
    MessageBox.Show("Avoid using, but this message will appear!")
End If

لازم به ذکر است که اگر چه به طور پیش فرض 'Option Strict' خاموش است، توسط مایکروسافت توصیه می شود و به طور گسترده ای در نظر گرفته می شود که خوب است 'Option Strict' "روشن" باشد.به دلیل این واقعیت کارایی نرم افزار افزایش می یابد و شانس اشتباهات نام دهی و دیگر خطا های برنامه نویسی را برطرف‌ می كند. ‌

دیگر ویژگی های سی شارپ که قابل اجرادر ویژوال بیسیک دات نت نمی باشد[ویرایش]

  • به صورت پیش فرض عملیات عددی چک نمی شود.این نتایج در کد کمی سریعتر است اما با خطر اینکه سرریزی عدد شناسایی نمی شود.با این حال ، برنامه نویس می تواند عملیات محاسباتی را در چهار چوب فعال چک کردن سرریز بررسی نماید.(این عمل در ویژوال بیسیک با انتخاب گزینه مورد می تواند انجام شود.)
  • عمل جمع .الحاق رشته بوسیله نماد یکسان + انجام می شود.هرچند در ویژوال بیسیک دات نت این نمادها از هم جدا شده اند،+ برای عمل جمع و از & برای الحاق استفاده می شود،اگر چه برای الحاق + نیز می تواند استفاده شود.
  • سی شارپ به بزرگ وکوچک بودن حروف حساس است.

مقایسه نحو[ویرایش]

در ویژوال بیسیک دات نت یک بلوک از کد با جمله End BlockName(یا Next) به پایان می رسد، که اين برای برنامه نویسانی با تجربه استفاده از T-SQL بیشتر آشنا است. در سی شارپ پرانتز ها، {}،برای محدود کردن بلوک ها استفاده می شود،که اين برای برنامه نویسانی با تجربه استفاده از زبان های گسترده و پیشرفته مانند سی شارپ و جاوا بیشتر آشنا است. بعلاوه ،اگر در سی شارپ یک بلوک تنها متشکل از یک تک عبارت باشد ، پرانتز حذف می شود. سی شارپ به بزرگ وکوچک بودن حروف حساس است در حالی که ویژوال بیسیک دات نت این گونه نیست.بنابر اين در سی شارپ امکان این که دو متغیر با نام یکسان وجود داشته باشد است ، برای مثال variable1 and Variable1. ویژوال استادیو حالت متغیر ها را به محض این که در ویژوال بیسیک دات نت تایپ می شود درست می کند.در بسیاری از موارد،حساس به بزرگ وکوچک بودن حروف می تواند مفید باشد.برنامه نویسان سی شارپ به طور معمول نوع نام را با حروف‌ درشت‌ می نویسند و عضو و نام متغیر را با حروف‌ کوچک می نویسند.این مسئله این امکان را به ما میدهد تا ،برای مثال روش نامگذاری طبیعی آرگمان ها آسان شود:public int CalculateOrders(Customer customer).البته، این می تواند برای کسانی که کد سی شارپ را به یک زبان غیر حساس به بزرگ وکوچک بودن حروف تبدیل می کنند ، مانند ویژوال بیسیک، یا کسانی که به خواندن زبان حساس به بزرگ وکوچک حروف عادت‌ ندارند مشکل ساز باشد.

کلمات کلیدی[ویرایش]

ویژوال بیسیک به بزرگ وکوچک بودن حروف حساس نیست که به این معنی است که هر ترکیبی از حالت های بزرگ و کوچک در کلید واژه ها قابل قبول است. با این وجود ویژوال استودیو به صورت خودکار تمام کلمات کلیدی ویژوال بیسیک را به طور پیش فرض به فرم حروف بزرگ تبدیل می کند. به عنوان مثال "Public", "If". سی شارپ به بزرگ وکوچک بودن حروف حساس است و تمام کلمات کلیدی سی شارپ به صورت کوچک است. ویژوال بیسیک و سی شارپ درکلمات کلیدی بسیاری سهیم اند، با این تفاوت که (به یاد داشته باشید که ویژوال بیسیک به بزرگ وکوچک بودن حروف حساس نیست)کلمات کلیدی ویژوال بیسیک نسخه هایی با حروف بزرگ از کلمات کلیدی سی شارپ می باشند.به عنوان مثال "Public" در مقابل "If" ، "Public" در مقابل "if".

توضیحات[ویرایش]

C# ویژوال بیسیک دات‌نت
//Single line comment 
 
/*Multi-line comment
  line 2
  line 3*/
 
///XML single line comment
 
/**XML multi-line comment
   line 2
   line 3*/
'Single line comment

توضیحات چند خطی قابل‌ استفاده نیست.

'''XML single line comment

xml توضیحات چند خطی قابل‌ استفاده نیست.

متن ضخیم

شرط ها[ویرایش]

C# ویژوال بیسیک دات‌نت
if (condition)
{ 
    // condition is true  
}
If condition Then 
    ' condition is true
End If
if (condition)
{ 
    // condition is true 
}
else
{ 
    // condition is false 
}
If condition Then 
    ' condition is true
Else
    ' condition is false
End If
if (condition)
{ 
    // condition is true 
}
else if (othercondition)
{ 
    // condition is false and othercondition is true
}
If condition Then 
    ' condition is true
ElseIf othercondition Then
    ' condition is false and othercondition is true
End If
if (condition)
{ 
    // condition is true 
}
else if (othercondition)
{ 
    // condition is false and othercondition is true
}
else
{ 
    // condition and othercondition are false 
}
If condition Then 
    ' condition is true
ElseIf othercondition Then
    ' condition is false and othercondition is true
Else
    ' condition and othercondition false
End If

حلقه ها[ویرایش]

C# ویژوال بیسیک دات‌نت
for (int i = 0; i <= number - 1; i++) 
{
    // loop from zero up to one less than number
}
For i = 0 To number - 1
    ' loop from zero up to one less than number
Next i
for (int i = number; i >= 0; i--)
{
    // loops from number down to zero
}
For i = number To 0 Step -1
    ' loops from number down to zero
Next i
break; //breaks out of a loop
Exit For 'breaks out of a for loop
Exit While 'breaks out of a while loop
Exit Do 'breaks out of a do loop

مقایسه ها[ویرایش]

تایپ های اصلي‌[ویرایش]

C# ویژوال بیسیک دات‌نت
if (a == b)   
{
    // equal
}
If a = b Then
    ' equal
End If
if (a != b)
{
    // not equal
}

یا:

if (!(a == b))
{
    // not equal
}
If a <> b Then
    ' not equal
End If

یا:

If Not a = b Then
    ' not equal
End If
if (a == b && c == d || e == f)
{
    // multiple comparisons
}
If a = b And c = d Or e = f Then
    ' multiple comparisons
End If
if (a == b && c == d || e == f)
{
    // short-circuiting comparisons
}
If a = b AndAlso c = d OrElse (e = f) Then
    ' short-circuiting comparisons
End If

انواع اشیاء[ویرایش]

C# ویژوال بیسیک دات‌نت
if (Object.ReferenceEquals(a, b))   
{
    // variables refer to the same instance
}
If a Is b Then
    ' variables refer to the same instance
End If
if (!Object.ReferenceEquals(a, b))   
{
    // variables do not refer to the same instance
}
If a IsNot b Then
    ' variables do not refer to the same instance
End If
if (a.Equals(b))   
{
    // instances are equivalent
}
If a = b Then
    ' instances are equivalent
End If
if ( ! a.Equals(b))
{
    // not equivalent
}
If a <> b Then
    ' not equivalent
End If
var type = typeof(int);
Dim type = GetType(Integer)
if (a is b)
{
    // types of a and b are compatible
}
If TypeOf a Is b Then
    ' types of a and b are compatible
End If
if (!(a is b))
{
    // types of a and b are not compatible
}
If Not TypeOf a Is b Then
    ' types of a and b are not compatible
End If

توجه : این مثالها برای آزمایش است و نه متغیر "a" و "b" مرجع تهی دارند(صفر در ویژوال بیسیک).اگر مرجع "a" تهی باشد، سی شارپ از روش ارزیابی equals. مدیریت مرجع تهی انجام می شود،درحقيقت در ویژوال بیسیک عملگر = مقدار درست را در صورت تهی بودن هر دو و مقدار غلط را در صورت تهی بودن یکی بر می گرداند(و اگر هر دو تهی نباشند از روش equals ارزیابی می شود).همچنین فرض می کنیم که روش equals. و عملگر = ابزاری برای نوع کلاس مورد نظر به اجرا در می آید.ترجمه دقیق حذف برای وضوح خواهد بود :

C#
if(object.equals(a,b))

VB.NET

If a = b Then

منابع[ویرایش]

  • مشارکت‌کنندگان ویکی‌پدیا، «Comparison of C Sharp and Visual Basic .NET»، ویکی‌پدیای انگلیسی، دانشنامهٔ آزاد (بازیابی در ۱۲ دسامبر ۲۰۱۰ برابر با دوشنبه،۶ دی ۱۳۸۹).