سلام
یه کوچولو در مورد بعضی بخشا بگم. البته اینم بگم که خوب طبیعیه سوالی که در مورد مقایسه ویبی و سی شارپ تو بخش vb.net پرسیده بشه قطعا کسی نمیاد از C# حمایت کنه که
اگه این کارو بکنه یه جورایی طرف خودشو میبره زیر سوال. هدفم هم از بالا آوردن این تاپیک این نیست که مثل دوستان مقایسه کنم این دو تارو. فقط جواب دادن به بعضی سوالات مطرح شدس.
قصد اینم ندارم که 2 تا من بگم 2 تا هم شما. حرفامو میزنم نتیجه گیریش به عهده خواننده
البته نه اینکه سی شارپ قدرتمند نیست ! چرا هست اما وقتی فلسفه پیدایش یک زبانی
بر مبانی رقابت با یک زبان دیگه باشه (
شما بخونین چشم و هم چشمی ) به نظر من نمیشه گفت نسبت به زبانی که پیشینه خیلی قدیمی تری داره ارجحیت داره
رو حساب پیشینه که نمیشه گفت چه زبانی قویتره چه زبانی ضعیفتر. اسمبلی هم خیلی قبلتر از زبانی مثل جاوا به وجود اومده. میشه با هم مقایسشون کردو گفت اسمبلی خیلی قویتره، چون قدیمیتره؟ !!
بعد اینکه چرا فکر میکنید سی شارپ برای رقابت با ویبی دا نت به وجود اومده؟ ماکروسافت که نمیاد با خودش رقابت کنه. به نظرم سی شارپ به وجود اومد تا ماکروسافت طرفداری سینتکس c رو از دست نده و
اونا نرن سمت چه میدونم مثلا دلفی و برنامه های غیر ماکروسافتی دیگه. والا واسه ماکروسافت فرقی نداره برنامه نویسا از سی شارپ استفاده کنن یا از ویبی
1) حالا یک سئوال:::::::::: چه کاری رو با C# میشه انجام داد که با vb.net نمیشه انجام داد؟
2) کدنویسی در محیط کدوم راحت تره؟
3) خطا گیری کدوم سریعتره؟
4) کدوم حجم کدش کمتره؟
5) کدوم کارکتر های جاوا رو نداره و مسخره بازی توش نیست؟
6) زمانی که کد مینویسی آخه چقدر ادم میخوام به نگارش فکر کنه فقط باید به کد بچسبی نه اینکه 100 خط تابع نوشتی بعد موقع run بفهمی که ; ندارن
7) جدا چه کاری میشه کرد با C# که با vb نمیشه انجام داد
اما اگر محدوده دید خودتون رو بیشتر کنید، می بینید که برای برنامه ریزی بسیاری از Micro Controller ها از زبان Basic استفاده میشه!
1) اگه در مورد #C و VB.NET بحث میکنی خوب چه کاری رو با VB.NET میشه انجام داد که با C# نمیشه? حرف سر VB.NET هستش نه پدرو پدر بزرگو یا استفاده از سینتکس VB تو فلان Device
هر دو کارای همدیگرو میتونن انجام بدن حالا تو یکی از طریق اسمبلی A و کلاس B تو اون یکی شاید از طریق یه اسمبلی دیگه و کلاس دیگه
2) خوب شما با VB کار میکنی مطئنا ویبی. واسه کسی که C# کار میکنه C#
3) به نظر شما VB? به نظر من C#. اصلا تا جایی که بتونه نمیزاره اشتباه کنی
4) چند خط کمتره؟ مثلا 1000 خط کد سی شارپ میشه 950 خط VB. ممکنه همون 1000 خط رو به یه حرفه ای بدی تبدیلش کنه به مثلا 600 خط. شاید VB هم بشه مثلا 580 خط. (گفتم مثلا، حالا n خط کد نزارید
اینجا بگید فلانش کن. چرا؟ چون باید اون حرفه ای رو گیر بیارید. نه منو )
5) کاراکترهای جاوا؟ نمیدونم منظورت چیه
6) کسایی که با VB کار کردن و حالا میخوان C# کار کنن (به هر دلیلی) معمولا این مشکلو دارن. والا C# کارا هر خط دستور رو که کامل میکنن اوتوماتیک وار اون ; انتها رو هم میزارن. بدون اینکه اصلا حواسشون بهش باشه. جدی میگم یه سری کارا اصلا احتیاجی به حضور ذهنو این چیزا نداره. ضمن اینکه تو C# اگه اون کاراکتر قشنگه رو (;) نزاری که درجا بهت پیغام ارور میده و احتیاجی به Run نداره. چه جوری بعد 1000 خط کد نویسی تازه متوجه بخش Error List میشی.
7) توضیح دادم
من خودم خیلی هایی که C# کار بودن رو به vb دعوت کردم و همشون میگن که برنامه ای که با C# میشه تو 2 روز نوشت رو با vb.net تو یک روز مینویسن
از یک برنامه نویس گرافیکی (طراح موتور های گرافیکی) پرسیدم vb.net یا C#.net گفت vb زبان C# مثل (دقیقا خود جمله این شخص)::: پیکان جوانان گوجه ای میمونه که آوردنش پایین کفش میخوره به زمین میمونه (خودش با C++) کار میکرد
منم یه VB کارو کشوندم سمت C#. الان دیگه C# رو ول نمیکنه. احتمالا اونا از همون اول باید میرفتن سراغ VB ولی این کارو نکردن. بحث همون سینتکسو ...
نظر ایشون کاملا محترمه. به هر حال هر کی میتونه نظر خودشو داشته باشه و اونو بیان کنه ولی دلیلی بر درستی مثال ایشون نیست (پیکان جوانان و ...)
میتونم به جرات بگم که نوشتن پایه یک برنامه تجاری با هردو اینها یکی هست.کاملا یکی. فقط یکم #C مسخره بازیش بیشتره ، چند تا از معایب #C رو میگم اونم فقط تو حالت ظاهری هست که VB نداره :
1. گذاشتن علامت ";" آخر هر خط
2. برای هر متغییری که استفاده میکنید فقط همون نوع متغییر رو توش میتونید بریزید، مثلا یک متغیر از نوع integer تعریف کرده باشید نمیتونید مستقیم داخل یک متغیر از نوع String بریزید باید از تابع ItoA استفاده کنید ولی زبان
فوق اعاده VB این قابلیت رو داره که به طور هوشمند خودش این کار رو انجام بده. مثل کد زیر :
Dim i As Integer
Dim s As String
s = "3"
i = s * 3
MsgBox(i)
1) توضیح دادم
2) همه تبدیلات هم تو تبدیل Str به int و اینا خلاصه نمیشه ها. ممکنه همین تبدیلاتی که VB خودش انجم میده (که احتمالا برنامه نویس هم حواسش به این موارد نیست) یه جایی کار دست برنامه نویس
بده. مثلا
Dim i As Integer
Dim s As Integer
s = "3.5"
i = s * 3
MsgBox(i)
البته شاید بگید خوب جوابش میشه 12 و این که دیگه اینقد حرف و حدیث نداره. اینجا آره نداره. ولی تو یه برنامه بزرگ اگه همین مسائل از دست طرف در بره، یه کوچلو اینور اوندر شدن عدد ممکن نتایج بدی داشته باشه. حالا بعد غرغرهای استفاده کننده ها از اون برنامه (که آقا این داره اشتباه محاسبه میکنه) طرف باید بشینه n هزار خط کد رو بررسی کنه ببینه این وسط چیه که داره
پارازیت میندازه. (ارور نه، محاسبه اشتباه)
ضمن اینکه اون چیزی که از دید شما نبودنش مزیت هستش و بودنش تو C# نقطه ضعف، برعکس از دید ما بودنش تو C# به صورت اجباری یه مزیت فوق العاده هستش.
اینم بگم که شما VB کارا هم میتونید این قابلیت رو داشته باشید که به صورت پیش فرض واسه شما غیر فعال هستش. واسه فعال کردنش هم تشریف ببرید تو Properties پروژه. تو تب Compile مطابق خواسته تون گزینه هاشو تغییر بدید. واسه تست، کدای دوستمون رو که میگن اررور نمیده کپی پیست کنید بعد از قسمت Compile Configurations اون 3 تا گزینه اول رو که رو None هست بزارید رو Warrning یا Error،
اونوقت میبینید که درجا بهتون ارور میده
1) من بخواطر اینا وی بی جونم رو ول نمیکنم وقتی عجله داری و کدت ممکنه خطا بده on error resume next به دادت میرسه
2) بیخودی مجورت نمیکنه واسه یه منی برنامه ای که فقط چند بار باهاش کار داری کد های اصولی و دستو پا گیر بنویسی وقتت رو بزاری روی یه منی برنامه
3) وقتی میخوای یک عدد رو بزری تو رشته یا برعکس لازم نیست بهش بگی که این یه عدد فقط کافیه بگی + یا & برای همین عاشق وی بیشم
4) وقتی میخوای یک متقیر داشته باشی تو کل برنامت استفاده کنی بدون دردسر و چند خط کد اضافه به ماژول میسازی و توش اینو مینویسی public A as string
هرکی میگه C# بهتره از ویبی واسم اون
دکمه طلایی Add Moduleرو تو C# نشون بده !!! دقیقا اینجاست این یه قابلیته واسه اونایی که دوست ندارن بیخودی کلاس بنویسن و سر راست توابع و متقییر ها رو تو کل برنامه به صورت سراسری میتونن استفاده کنن بدون یک خط کد کلاس نویسی و دردسر هاش (البته تو مینی برنامه های من کاربرد فراوانی داره نه در پروژه های حساس)
من جدا با گزینه های 1و 2 که اینجا ازشون به عنوان نقطه قوت ویبی یاد کردید، مشکل دارم. ببین خودت تو همین 2 جمله دلیله اصلی خودتو از انتخاب VB گفتی. وقتی عجله داری و ممکنه کدت خطا بده یعنی چی؟ چرا باید کدی بنویسیم که ممکنه ارور داشته باشه و بخوایم به قول شما on error resume next استفاده کنیم؟ این اصلا ربطی به VB یا C# نداره ها. مشکلم با مفهوم جمله تونه
تو قسمت 2 گفتی مجبور نیستی کدای اصولی بنویسی (هر چند تو ادامه گفتی واسه برنامه های موقت). اینقدر برنامه هست با #C که به صورت افتضاح، غیر اصولی نوشته شده. برعکسم هست، اینقدر هم برنامه های اصولی با VB طراحی شده. اگه همین برنامه های کوچیک رو که میگی، اصولی بنویسیم، اونوقت وقتی بریم سراغ برنامه های بزرگتر، اوتوماتیک وار کدا رو اصولی مینویسیم. دیدت رو عوض کن
3) توضیح دادم
4) تو یه تاپیک تو بخش ASP.NET یکی گفته بود آقا تو Add New Item من گزینه Handler رو ندارم. حالا چیکار کنم. مهدی موسوی گفته بود بابا Handler چیزی نیست جز یه کلاس ساده که از اینترفیس
IHttpHandler ارث بری میکنه. همین نه بیشتر
شما لطف کن از طریق همون بخش طلایی یه کلاس یه اینترفیس و یه ماژول اضافه کن به پروژه. نوع فایلهایی که به پروژه اضافه میشه و کدای داخل هر کدوم رو یه بررسی کن. همشون با پسوند .VB هستن و کداشون هم
کلاس
Public Class Class1
End Class
اینترفیس
Public Interface Interface1
End Interface
ماژول
Module Module1
End Module
اون ماژولی که اینقد ازش تعریف میکنید چیزی نیست جز کلاس زیر
internal static class Module1
{
}
که چون کلاس Static هستش، اجبارا اعضای داخل اون هم باید Static باشن و این یعنی همون جمله خودتون
میخوای یک متقیر داشته باشی تو کل برنامت استفاده کنی
Module Module1
Public A As String
End Module
internal static class Module1
{
public static string A;
}
1) به نظرم بحث درمورد مقایسه دو زبان به جایی نمیرسه چون هر کدوم مزایا و معایب و کمبود های خودشون رو دارن
2) برای مثال تو #C شما به کلاس جادویی My دسترسی ندارید! یا Import ها (Using های ) سطح پروژه ندارید ! و ...
3) اما یکی از برتری های خیلی مهم سی شارپ این هست که شما وقتی در حال برنامه نویسی با اون هستید تقریبا مطمئن هستید که ( نسبت به VB.NET) خطای ران تایم کمتری خواهید داشت مخصوصا خطا های سهوی و خطای تبدیلات ، و این به خاطر کامپایلر بسیار محتاط سی شارپ هست
1) نمیشه گفت معایب. هر کی با هر کدوم راحت تره میره سمت اون. این دلیل بر عیب اون یکی نیست
2) تو ASP.NET اون Using های سطح پروژه رو داریم. احتمالا منظورتون تو Win app هستش. خوب اینکه من تو هر CodeBehind فقط Using های همون فرم رو داشته باشم، این از نظر شما یه عیبه؟!
ضمن اینکه میشه با گزینه Organize Using اون Using هایی که الکی تو صفحه تعریف شدن رو حذف کرد. تو 2012 حتی میشه اون Refrence هایی که تو پروژه وجود داره ولی ازشون استفاده نشده حذف کرد
این گزینه رو Resharper هم داره.
اون کلاس جادویی (که البته یه NameSpace هستش نه کلاس) My چه کاره خاصی انجام میده؟ یکی از دوستان جلوتر یه مثال براش زده که اونجا توضیح میدم. ولی به فرض که C# کارا به My دسترسی نداشته باشن. یعنی نمیتونن اسمبلی Microsoft.VisualBasic.dll رو به پروژشون اضافه کنن و از کلاساش استفاده کنن؟
3) توضیح دادم که این قابلیت تو VB هم هست، فقط باید فعال بشه
تو C# یه چیزهایی رو نمیتونم تحمل کنم :
1- ; آخر هر دستور
2- وقتی کد مینویسی دائم اون خط قرمز زیرش هست تا وقتی که دستور کامل شه که تو VB اینجوری نیست
3- TAB درست نمیزنه ! تو VB کد خیلی تمیز تره (به صورت پیش فرض)
4- تو کدهای یکم بلند تر واقعا سر {} گیج میشم ! آخر کد {{{{ داری که نمیدونی هرکدوم مال کدوم شروع
1) سلیقه شما اینجوریه. این ایراد #C نیست
2) توضیح دادم
3) چرا Tab درست نمیزنه؟ و چرا فکر میکنید تو #C کدا تمیز نیستن. تمیز کد نوشتن بستگی به خود فرد کد نویس داره نه به زبانی که باهاش کد مینویسه. خصوصا تو دات نت. چه بسیار کدای کثیفی که از طریق هر دو زبان نوشته شدن و بر عکس
4) ایراد کار اینجاس که شما میخواید خطوط برنامه تون کم بشه، میخواید همه چیو تو دل هم جا بدید. ({{{{). واسه هر کدوم یه اینتر بزنید اونوقت با اون Then و End مقایسه کنید. البته اینم به سلیقه برمیگرده.
به شخصه از اون End هایی که تو پروژه های VB هستن متنفرم. یه مثال الکی
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
If 1=1 Then
If 2=2 Then
If 3=3 Then
Else
If 7=7 Then
End If
End If
End If
End If
End Sub
به نظر من کاری نیست که C# انجام بده ولی vb انجام نده.
و برعکس (قبلا توضیح دادم)
و اما اینتر در vb در شرط if دستور رو مینویسی بعدش که کدت تموم شد بدون اینکه بخوای then رو بذاری یه اینتر میزنی خودش برات کاملش میکنه
end if رو میگم و خیلی از کد های دیگش مثل try
تو #C می نویسی try یه دونه اولش } رو بذار بعدش { رو بذار بعد
Catch ex As Exception که اینم تو #C قاطینکنی , بازم }{ رو دوباره بذار
واما تو vb
try رو اینتر کن بدون دردسر
تو #C هم بعد try ، tryf , if , ... دو بار Tab بزن بدون دردسر. (Code Snippet). کلید میانبرشون هم که مشخصه و قایل تنظیم (CTRL + K, S)
سال پیش بود و در شرکتی مشغول به کار بودم که نیمی از برنامه نویس ها VB.net و نیمی C# کار میکردند و هر روز ما این بحث رو داشتیم !طی این مدت همه به دنبال نقاط ضعف و قوت این سینتکس ها بودیم ! که پیروز این جنگ من شدم !
حال چند مورد کوچیک از مزایایی که C# کارها اعتراف کردند vb توی این حالت بهتره رو براتون میگم . (در سایر حالت ها هم آخر همین پست توضیح دادم )
واقعا اون گروه C# کار رو باید اعدام کردا. لطمه زدن به جامعه برنامه نویسی.
مزایای vb.net نسبت به C# :
- اولیش اینه که در سینتکس وی بی میشه به راحتی xml نوشت !!! که C# نداره !! (کسی راهشو فهمید به ما هم بگه :)) ) ....
Dim test As Integer = 11
Dim x = <Element Attribute='d2' at='test'>
<te tee3="5454">
<%= test %>
</te>
</Element>
دروغ نگم حدود 5 min به این نحوه کد نوشتن خندیدم. آخر بی نظمی. همه چی تو دل همدیگه
این کد xml رو اگه بخوایم توی C# تولید کنیم باید 7-8 کلاس بسازیم و مقدار دهی کنیم و اونها رو به همدیگه اضافه کنیم و ....
نه. راه زیاده. 7و8 تا کلاس هم لازم نیست
XDocument.Parse(
@"<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<!-- List of books and magazines -->
<library>
<books>
<book name='The Hunger's Games' author='Suzanne Doe'/>
<book name='Breaking Dawn' author='Stephenie Meyer'/>
<book name='The Last Song' author='Nicholas Sparks'/>
</books>
<magazine>
<magazineName>"MSDN Magazine"</magazineName>
<magazineName>"Code Magazine"</magazineName>
</magazine>
</library>").Save("01.xml");
نگید ما یه متغیر وسطشم داریم یا Node ها رو میتونیم با حلقه ایجاد کنیم و .... کافیه هر جور که میخوایم رشته رو آماده کنیم و بعد رشته نهایی رو بدیم به تابع
2- نداشتن NameSpace My :
زیاد توضیح نمیدم چون همه ویبی کارها میدونند که این چه نعمتیه ! اگه یک C# کار فقط بخواد از سیستمش صدای Beep رو در بیاره باید 4 خط کد بنویسه ... اون هم با سرچ (چون احتمالا یادش نیست ...)
Beep!!!
SystemSounds.Beep.Play();
- خوانایی کدهای ویبی به مراتب بالاتره ! و دلیل دارم !!
شما اگه جایی مجبور به استفاده از For های تو در توی زیاد و if های تو در تو و... بشید ! در انتهای یکی از این بلاک ها بخواید 1 خط در C# اضافه کنید بین این همه {}{}{}{}{}}{}{}{}{}{}{} !!!! کجا باید اضافه بشه !؟
این مشکل شاید توی Visual Studio خودش رو نشون نده ولی به طور مثال توی CodeSmith اگه بخواید با C# یک Generator بنویسید توی اون IDE ضعیف ... به همین نتیجه میرسید !
4- زبان ویبی در آفیس استفاده میشه !
خوب این که خیلی مشخصه ... شما اگه C# کار باشید و بخواید توی Access - Excel ویا .... 1 خط کدنویسی کنید به مشکل میخورید ولی سینتکس ویبی اونجا هم کاربرد داره !
3) به نظرت اینکه CodeSmith نمیتونه یه مورد رو هندل کنه، این ضعف C# هستش یا ضعف اون نرم افزار؟ چرا ربطش میدید به C#. در مورد }{ هم گفتم
4) سینتکس C هم کم کاربرد نداره ها
کلاس ها و ماژول های کار با String ها در ویبی :
این کلاسها هم احتیاج به توضیح ندارند ! هر کس این 2 زبون رو بلد باشه میدونه که توابع درون ماژول Strings چقدر کار رو راحت کرده که توی C# وجود نداره !
واقعا اینو به عنوان یه قابلیت میدونید؟ هستا، نه این که نباشه. ولی بودو نبودش اینقدا هم که شما بزرگش کردید مهم نیست. مثلا فکر میکنید تابع Right از کلاس Strings چه کار عجیبی انجام میده؟
میگه از سمت راست یه رشته به تعداد x کاراکتر جدا کن و برگردون. کدای تابع Right رو ببینیم
C#
public static string Right(string str, int Length)
{
if (Length < 0)
{
throw new ArgumentException(Utils.GetResourceString("Argumen t_GEZero1", new string[1]
{
"Length"
}));
}
else
{
if (Length == 0 || str == null)
return "";
int length = str.Length;
if (Length >= length)
return str;
else
return str.Substring(checked (length - Length), Length);
}
}
VB
Public Shared Function Right(ByVal str As String, ByVal Length As Integer) As String
If Length < 0 Then
Throw New ArgumentException(Utils.GetResourceString("Argumen t_GEZero1", New String(0) {"Length"}))
Else
If Length = 0 OrElse str Is Nothing Then
Return ""
End If
Dim strLength As Integer = str.Length
If Length >= strLength Then
Return str
Else
Return str.Substring(checked(strLength - Length), Length)
End If
End If
End Function
تو همه توابعی که مد نظر شماس اومده با یه سری توابع مربوط به نوع استرینگ و یه کم محاسبه، به نتیجه مورد نظر رسیده و اون توابع رو به صورت استاتیک (Shared) تو کلاس Strings جمع کرده و در اختیار
برنامه نویس قرار داده. گیرم که من خودم حال و حوصله نوشتن این کدا رو نداشته باشم. اینقدر سخته که فضای نام Microsoft.VisualBasic رو به پروژه اضافه کنم؟
مشخص نبودن Handle یک Event در C# !
1
2
3
Private Sub Form_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
خوب خیلی ساده اگه کنترلی از روی فرم Cut کنید و جایی Paste کنید Handle اون کنترل از بین میره و دیگه Event اجرا نمیشه ! توی ویبی میتونید همونجا آخر متد مربوطه بنویسید Handles MyBase.Load یا Handles Button1.Click و ... به همین راحتی میشه چند Event رو به یک متد نسیت داد ولی توی C# این قسمت داخل Designer نوشته میشه !!!!!! که واقعا نمیدونم چرا !! و خیلی جاها شده که آدم نمیدونه چرا متدش یا مثلا Button کار نمیکنه !
حالا حتما باید با یه بار کپی پست کردن به نتیجه برسید؟ این که به عنوان یه ضعف تو C# ازش اسم بردید اینقد مهمه که طرف بیخیاله C# بشه؟ فکر نمیکنم
تا به امروز همه C# کار ها حداقل یک بار NameSpace Vb رو به برنامشون اضافه کردند ... ولی کجا دیدید که یک ویبی کار احتیاج به NameSpace C# داشته باشه
ما خوشحال میشیم حاصل دسترنج VB کارا رو تو برنامه هامون استفاده کنیم. همونطور که شما از C# استفاده میکنید. روشن ترین مثالشم همین اسمبلی Microsoft.VisualBasic.dll هستش که با #C نوشته شده. موضوع مهمی نیست. جای بحث هم نداره
چون شما زیاد با وی بی کار کردی این نظرو داری . منم با سی شارپ بیشتر کار کردم به نظرم خوانا تره
موافقم
احتمالا سوادتون به استفاده از Generator ها نمیرسه !
واسه همین مثال میزنم !
فرض کن بخوای توی NotePad .... بشینی و با C# فورهای تو در تو بنویسی و .... خوب اونجاست که خوانایی سینتکس کاملا مشخص میشه!
اول اینکه تو بحث های این مدلی رعایت احترام مستحب نیست. واجبه. پس خواهشا رعایت کنید
دوم اینکه من خودمو میگم. با سینتکس VB حتی تو خود VS هم مشکل دارم. چه برسه به Notepad. اگه قرار باشه تو Notepad هم کد بزنم (خدا اون روزو نیاره) انتخابم همین C# هستش نه VB
در ضمن دوستانی که تعصب دارند روی C# ضعف هاش رو که من گفتن نسبت به وی بی رو توجیه کنند ! ....
قصدم توجیه نبود. خواستم بگم شاید از دید من نوعی، یه موضوع اصلا درست نباشه یا توجیه نداشته باشه. (هر موضوعی تو هر زمینه ای نه فقط برنامه نویسی). ولی ایراد از دید من نسبت به اون موضوع باشه.
ببینید قرار نیست هر 2 تا برنامه راههای یکسانی رو واسه حل یه مسئله در اختیار برنامه نویس قرار بدن که اگه اینجوری بود اصلا لازم نبود 2 تا زبان باشن. همون یکی کفایت میکرد
ترکیدم از بس تایپ کردم
خلاصه اینکه نباید 1 طرفه قضاوت کنیم. همونطوری که گفتم انتظار ندارم کسی از حرفام اینجا استقبال کنه. چون همه اینجا طرفدار VB هستن. همین تاپیک رو منتقل کنید به بخش C# اونوقت ادامه این تاپیک میشه تعریف از C# و بدگویی از VB که آی سی شارپ اینو داره و ویبی نداره و ... (حالا طرف واقعا هم نمیدونه ها، فقط شنیده)