# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > C#‎‎ >  تاپیک جامع برای مقایسه ی VB.net و سی شارپ

## ehsaanjoon

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

--------------------------------------

دوست عزیز لطفا :
1- عنوان مناسب و فارسی انتخاب کنید.
2- مطالب مربوط به دات نت رو تو این قسمت مطرح کنید
با تشکر مهدوی

----------


## Mahdavi

دوست عزیز 
در مورد #C یا vb همه چیز بر می گرده به خودت .
اگه به چند مطلب پایین تر که پست شده نگاه میکردید جوابتون رو می گرفتید
http://www.barnamenevis.org/viewtopic.php?t=7802

----------


## مهدی کرامتی

> من می خوام .net یاد بگیرم ولی نمی رونم سی شارپ بهتره یا وی بی


اگر Delphi رو خوب بلدی برو سراغ #C ، اما اگر هنوز زیاد واردش نشدی و آلوده زبان مسحور کننده Object Pascal نیستی VB.NET هم بدک نیست. در ضمن، از نظر سادگی VB.NET ساده‌تر از #C است.
از لحاظ ساختاری و فرم کلاسها #C و Delphi خیلی شبیه هستند (شاید بخاطر اینکه هر دو توسط یک نفر طراحی شده‌اند).




> و اینکه نمی دونم اینقدر دات نت دات نت می کنن برا چیه؟همین دلفی خودمون مگه چشه!؟


دلفی خودمون هیچی‌اش نیست، ضمن اینکه این روزها Delphi.Net هم غوغا کرده.

و اما چرا دات نت دات نت میکنن؟
دعوا سر آینده است. مایکروسافت هر روز یک بازی جدید برای ما داره. و بازی جدیدش از همه ... تر است: حذف Win32 از ویندوز!

بدین ترتیب وقتی 2 سال دیگه (سال 2006) ویندوز لانگهورن بیاد Win32 هنوز وجود داره، اما بصورت Un-Documented، این میتونه به این معنی باشه که تو ویندوز 2007 دیگر اثری از Win32 نخواهد بود و فقط امکان محدود اجرای برنامه های مبتنی بر Win32 وجود خواهد داشت.
تا اون موقع هنوز حدود 2 سال زمان باقی است، اما بهرحال شمارش معکوس شروع شده و یک برنامه نویس عاقل و آینده‌نگر بهتره خودش رو از همین حالا برای دات نت آماده کنه. 
انتخابهای موجود هم عبارتند از Visual Basic.Net ، Visual C#‎ ، Delphi.Net و C#‎ Builder . انتخاب هر کدوم از اینا بستگی به این داره که با کدوم راحت‌تر هستید.




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


وقتی به شما یک پروژه جدید میدن (که بفرض شامل نگهداری داده‌ها در دیتابیس هم باشه) ، مراحلی که باید طی کنید اینها هستند: مطالعه کامل بر روی تمام جنبه‌های پروژه، شامل:
[list:40b5a19e0b] بررسی نیازها و انتظاراتی که قرار است بوجود آمدن چنین سیستمی آنها را برآورده کند مطالعه کامل مراحل کاری که قرار است انجام شود جمع‌آوری فرمها و مستندات فیزیکی موجود مصاحبه با دست‌اندرکاران سیستم فیزیکی کنونی (اگر سیستم از قبل بصورت فیزیکی در حال کار باشد) و ...[*] سپس: طراحی سیستم نرم‌افزاری طراحی بانکهای اطلاعاتی کدنویسی انجام تستهای نهایی تحویل کار به کارفرما[/list:u:40b5a19e0b]

چیزهایی که شما (اگر کاملا بلد نباشید) باید یاد بگیرید عبارتند از: مفاهیم مهندسی نرم‌افزار شامل:
[list:40b5a19e0b] متدولوژی‌های نرم‌افزاری اصول طراحی بانکهای اطلاعاتی[*] مقداری تجربه عملی در بکار بردن موارد فوق (هر چی بیشتر بهتر!)[/list:u:40b5a19e0b]

----------


## Abbas Arizi

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

----------


## مهدی کرامتی

> اگر چه برای خود من هم پذیرفتن این مساله یه کم سخته ولی *در نهایت این اتفاق رو به سود قشر برنامه‌نویس ارزیابی میکنم.*


من اصلا با شما موافق نیستم. برنامه های جدید مایکروسافت (منظورم دات نت و لانگهورن نیست) در جهت ریشه کن کردن نسل برنامه نویس ها و Developer ها است!
چطوری‌اش رو الان حال ندارم بگم، ولی سرفرصت براتون مینویسم  :?

----------


## Abbas Arizi

منتظر هستم. چون برام جالبه بدونم وقتی نسل برنامه‌نویسا ریشه کن شد اون وقت کی نیازهای نرم‌افزاری ملت رو برآورده میکنه؟  :!:

----------


## مهدی کرامتی

مایکروسافت!

----------


## Abbas Arizi

پس احتمالا منظور شما از برنامه‌نویس برنامه نویسهای خاصی است نه همه برنامه‌نویسها مثل اونهایی که در محدوده سیستم عامل و کامپایلر و .. فعالیت میکنن درسته؟
چون همه مردم دنیا که نمیتونن برن سفارشهای برنامه نویسی رو به مایکروسافت بدن.

----------


## Mahdavi

نه دوست عزیز 
نیازی نیست شما سفارش به مایکروسافت بدید . بلکه با وجود فرم سازها و .... شما فقط کافی است که رولها و قوانین کار رو بدونید در اینصورت بر روی یه بستر نرم افزاری شما خواهید توانست نیازهای خودتونو بر آورده کنید.
مثال خیلی پیش و پا افتاده اون همین Nuke ها هستند.
که با ماژولار بودنشون شما خیلی سریع یه سایت را میندازید.
اگه یه سری به www.omg.org  بزنید با یه سری  از این اصول و قواعد آشنا خواهید شد .
پس بجنبیم که ما همون بستر نویس باشیم در غیر اینصورت فردا یه کاربر ساده میتونه با این سیستمها نیازهاشو برآورده کنده. به شرطی که قواعد و قوانین کار خودشو بدونه (که بعید می دونم کاربر از اصول و قواعد کار خودش آگاهی نداشته باشه !!!)
 :?

----------


## مهدی کرامتی

خوب، حالم یک کم بهتر شد  :wink: 

مایکروسافت طبق اخبار از منابع موثق در حال تولید یک پکیج *تولید اتوماتیک نرم‌افزار* است. بدین ترتیب که با نصب پکیج مذکور و اجرای آن یک Wizard باز میشود و از شما میخواهد تا مقصود و انتظارتان از برنامه‌ای که قرار است بوجود بیاید را طی مراحل ساده‌ای برای آن توصیف کنید.

سپس برنامه بطور اتوماتیک کاربرد (نرم‌افزار) موردنظر بهمراه دیتابیس مربوطه تولید کرده و برنامه آماده را تحویل میدهد!

برای کار با این پکیج مقدار دانشی که نیاز است در حد کمی فراتر از اپراتوری کامپیوتر میباشد!

اسلایدها و توضیحات این پکیج در کنفرانس آمستردام مایکروسافت به نمایش گذاشته شده است  :roll:

----------


## Abbas Arizi

خدا ذلیلشون کنه :cry:  :cry: 
الهی خیر از جوونیشون نبینن :cry:
پس ما جل و پلاسمونو جمع کنیم بریم یه چیز دیگه یاد بگیریم؟ :?:
البته اون چیزی که من بالا در مورد مثبت ارزیابی کردن گفتم در مورد دات نت و لانگهورن بود و از این قضیه مطلع نبودم. فقط میتونم آرزو کنم که چنین اتفاقی نیفته.

----------


## مهدی کرامتی

این فعلا در حد حرف است، اما از مایکروسافت انحصارطلب بعید نیست!

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

در حال حاضر بهتر است به همان رویه دات نت ادامه دهیم و امیدوار باشیم که این اتفاق نیافتد.

----------


## Abbas Arizi

من حقیقتش از این کارای مایکروسافت سر در نمیارم. فکر می‌کنم بیلی آخر عمری عقلشو از دست داده. چون با این کارایی که داره می‌کنه کل محصولاتی که خودش در گذشته تولید کرده رو هم داره نابود میکنه. یعنی وقتی مثلا لانگهورن بیاد میشه گفت به تدریج فاتحه تموم ویندوزهای قبلی خونده میشه و فقط XP و Windows Server 2003 میتونن به زور به نفس کشیدن ادامه بدن.
زبانهای برنامه نویسیش نابود میشه. من الان دارم فکر میکنم وقتی Win32 از صحنه کنار رفت تکلیف مجموعه کلاس قدرتمند و فوق‌العاده‌ای مثل MFC چی میشه؟ ++VC میشه یه چیزی تو همون مایه‌های #C و VB؟
 هر چی هم تا به حال گشتم نتونستم یه مقاله‌ای چیزی در این رابطه پیدا کنم که این مسایل رو به خوبی شرح داده باشه. اگه دوستان مطلبی دارن لطف کنن مارو مستفیض کنن.

----------


## مهدی کرامتی

> مثلا لانگهورن بیاد میشه گفت به تدریج فاتحه تموم ویندوزهای قبلی خونده میشه و فقط XP و Windows Server 2003 میتونن به زور به نفس کشیدن ادامه بدن.


درسته. اما یک کم فکر کنید حساب کار دست تون میاد: وقتی فاتحه ویندوزهای قبل از XP و 2003 خونده شد همه مجبور میشن ویندوزهای کنونی شون که درصد زیادی‌اش رو ویندوز 98 و Me و 2000 در برمیگیره به آخرین نسخه Upgrade کنن.
آخرین باری که یادمه شنیدم هنوز 3 میلیون کاربر در سراسر دنیا دارن از ویندوز 98 استفاده میکنن.
بفرض اینکه هر کدوم برای Upgrade به آخرین نسخه مجبور به پرداخت 100 دلار هم بشن این مقدار در میاد:
3,000,000 * 100 = 300 Milion Dollars !
این تازه یک گوشه کاره. حالا وقتی کاربرهای بخت برگشته مجبور شدن اینکارو بکنن تازه اول داستانه: اونها مجبورند تمام مجموعه نرم‌افزارهایی که تا دیروز داشت درست روی ویندوز 98 کار میکرد (مثلا آفیس 95 یا 97 و ...) رو هم Upgrade کنن، و این برای تمام نرم‌افزارهایی که اونا رو PC شون دارند صدق میکنه.
بازهم ماجرا به اینجا ختم نمیشه. اون کاربرهای کذائی مجبورند سخت‌افزارشون رو هم Upgrade کنند. این یعنی یک درآمد هنگفت موازی برای شرکای مایکروسافت!

علاوه بر اینها، مایکروسافت داره لانگهورن رو طوری درست میکنه که برای کاربر هلو بپر تو گلو بشه، اما چه جوری؟
اینطوری که مثلا میاد یک سری از سخت‌افزارهای رایج رو تو ویندوز لانگهورن استاندارد میکنه و به این ترتیب فروش شرکت های همکار و شریک‌اش، یا بهتر بگم، اونهایی که به سیاست مایکروسافت تن میدن رو تضمین میکنه، و بهمین ترتیب فروش شرکتهای مخالف سیاستهاش رو زیر سوال میبره.
نمیدونم چرا این کارهای مایکروسافت کلمه انحصار و استعمار رو تو ذهن من تداعی میکنه.
در اینباره میشه بیشتر بحث کرد، اما نتیجه باز هم همانی خواهد بود که گفتم.

بازم بگم؟  :wink: 




> من الان دارم فکر میکنم وقتی Win32 از صحنه کنار رفت تکلیف مجموعه کلاس قدرتمند و فوق‌العاده‌ای مثل MFC چی میشه؟


ساده است: به دست فراموشی سپرده میشه! 




> ++VC میشه یه چیزی تو همون مایه‌های #C و VB؟


گرچه الان ++VC هم در مجموعه دات نت وجود داره، اما با وجود #C که بعنوان زبان اصلی مایکروسافت اعلام شده و راحت‌الحلقوم هم هست، باز هم کسی حاضره با VC++‎ .Net کار کنه؟ بعید میدونم منهای اون دسته که دیگه اونقدر آلوده <span dir=ltr>Visual C++‎</span> شدن که نمی‌تونن ترکش کنن کسی به اینکار تن بده. بودن VC++‎ .Net در مجموعه دات نت بقول خود مایکروسافت جنبه تشریفاتی داره و احتمالا در نسخه 2006 دات نت حذف میشه.

----------


## ehsaanjoon

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

----------


## ehsaanjoon

راستی یادم رفت
من C++‎ بلدم یادگیری C#‎ برام آسونتره درسته؟

----------


## مهدی کرامتی

> مگه اینطور نیست که اگه قانون کپی رایت تو ایران تصویب بشه دیگه ویندوز طرفدار نخواهد داشت.


خیر، اینطور نیست. در بخش خبرها بحث "سعی در حذف ویندوز از شبکه رایانه‌ای کشور" را ببینید.




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


بازم خیر (عطف به پاسخ بالا).

----------


## مهدی کرامتی

> من C++‎ بلدم یادگیری C#‎ برام آسونتره درسته؟


بله.

----------


## Delphi-Clinic

مطالب آقای کرامتی هم قبلا از لسان مبارک خودشان شنیده بودم و حالا هم تو این تاپیک دوباره مرور کردم

بله حقیقت دارد مایکروسافت بدجوری برامون خواب دیده.

----------


## Monaa

> برای کار با این پکیج مقدار دانشی که نیاز است در حد کمی فراتر از اپراتوری کامپیوتر میباشد!
> 
> اسلایدها و توضیحات این پکیج در کنفرانس آمستردام مایکروسافت به نمایش گذاشته شده است  :roll:


   :)  اگر ممکن است لینک یا منبعی از نرم افزاری که گفتید یا
 از کنفرانس آمستردام مایکروسافت بدهید . خیلی دوست دارم در این
 مورد بیشتر مطالعه کنم ( خودم موفق نشدم از  Google چیزی پیدا
  کنم )

  ممنون

----------


## Mahdavi

دوست عزیز این ایده ماله مایکروسافت نیست. خیلی ها دنبال این کارند و بعضی ها هم انجام دادند.
همون لینکی که من گذاشتم در اصل استاندارد های لازم برای پیاده سازی چنین نرم افزارهایی رو ارایه میده.
من و تعدادی از دوستانم هم مشغول تحقیق و پیاده سازی چنین سیستمی جهت کارخانجاتی که می خواهند MIS یا ERP داشته باشند هستیم. انشاالله با کاملتر شدن پروژه و اگه آقای کرامتی اجازه بدند قسمتی را تو این سایت به این مساله اختصاص خواهیم داد.

----------


## مهدی کرامتی

http://www.microsoft.com

کلمه کلیدی: Business Solutions

----------


## Abbas Arizi

> بودن VC++‎ .Net در مجموعه دات نت بقول خود مایکروسافت جنبه تشریفاتی داره


البته این حرف شاید در مورد پروژه‌های ++Managed C صحیح باشه. چون هم از لحاظ کد خروجی، هم کتابخانه کلاس، بستر اجرا و برخی قواعد دستوری با #C مشابهه و با بودن #C اصلا استفاده از ++C مقرون به صرفه نیست.
ولی در مرود پروژه‌های Win32 اصلا این طور نیست. چون مایکروسافت هم MFC رو ارتقا داده هم IDE رو قدرتمدتر کرده و خلاصه کلی بهش رسیده.
ولی خب حذف Win32 میتونه باعث مرگ این زبان هم بشه که به نظر من دردناکترین اتفاق در این فراینده. چون من تازه داشتم می‌فهمیدم که این زبان چی هست؟ :( 
فکر کنم کم کم باید در خصوص دیدگاهم در مورد مایکروسافت تجدیدنظر کنم.

----------


## Monaa

دوست عزیز آقای دلفی اسیستنت

من بخوبی با  business solution مایکروسافت آشنا هستم و فکر
میکردم محصولی که شما در مورد آن صحبت کردید نرم افزار جدیدی است
که من از وجود آن بی خبرم در حالیکه اینطور نیست
قبل از هر توضیحی این عکس رو به دقت ببینید :



در این عکس نقش  business solution مایکروسافت در چرخه
تولید نرم افزار نشان داده شده است 
همانطور که میبینید business solution مایکروسافت استانداردهائی
است که مایکروسافت برای تولید راه حلهائی برای نرم افزاری
سازمان ارائه کرده است یعنی اگر شرکتی خواست با استفاده از
محصولات مایکروسافت یک  ERP= Enterprise Resource Planning
 یا یک  CRM = Customer Relationship Manager یا یک
SCM = Supplay Chain Management تولید کند چطور باید عمل کند 
یا اگر یک سازمان خواست پروژه هایش را کنترل کند چطور از مجموعه
Office و  MS Project به عنوان  Collaboration Suite مایکروسافت
برای  Project Controlling استفاده کند 
یعنی  business solution نرم افزار یا بقول شما  Package جدیدی
نیست که تولید شده باشد یا قرار باشد تولید شود بلکه مجموعه استانداردهائی
است سازگار با  OMG ( که جناب آقای مهدوی هم گفتند ) برای
تولید :  Business Solutions
http://www.microsoft.com/BusinessSolutions/default.mspx

لازم است در مورد اجزاء آن کمی بیشتر توضیح دهم

مایکروسافت همین حالا تعدادی نرم افزار دارد
سیستم عامل - ابزار تولید برنامه - برنامه های مدیریت
پروژه - برنامه های مدیریت کارهای دفتری - برنامه های ارتباطی
و ...... حالا چطور باید به "نحو احسن" از این نرم افزارها استفاده کرد تا
یک راه حل نرم افزاری برای مسائل شرکت یا وزارتخانه یا سازمان
داشته باشیم ؟ ( با فرض اینکه بخواهیم فقط از محصولات مایکروسافت
استفاده کنیم ) business solutions برای راهنمائی مدیران و برنامه نویسان
است تا بتوانند با کمک مایکروسافت ( که آقای دلفی اسیستنت به آن
اشاره کردند ) و بدون استفاده از هیچ نرم افزار و شرکت دیگری به هدفهای
خود برسند . یعنی قرار نیست چیزی تغییر کند یا برنامه نویسان
حذف شوند یا هر کسی خودش برنامه هایش را بنویسد 
فقط قرار است همه و همه برای همه نیازهایشان از محصولهای
مایکروسافت استفاده کنند ( که در مورد انحصار طلبی مایکروسافت
دوستان قبلا صحبت کرده اند ........)
پس همیشه برنامه نویسان در موقعیت خود خواهند بود هر چند شاید
شکل برخی مسائل تغییر کند مثلا Win32 بشود دات نت یا  C بشود
#C یا ..........
برای کامل شدن  business solutions هنوز هم محصولات مایکروسافت
ناقص است و در آینده حتما چند ابزار دیگر به سری محصولات مایکروسافت
اضافه میشود تا کسانیکه سرسپرده مایکروسافت هستند دل به
business solutions بدهند و با تبعیت از راهنمائی های مایکروسافت
از نرم افزارهای مایکروسافت برای رسیدن به هدفها استفاده کنند
مثلا اخیرا برای سازمانهای کوچک و small businesses شرکت مایکروسافت
یک  Package توزیع کرده است که در آن ویندوز 2003 سرور و  MS SQL Server
 ویک  Exchange Server از نوع  Enterprise Edition با قیمت 1200 دلار
فروخته است ( قیمت هر کدام از اینها جدا جدا 6000 دلار است )
یعنی مایکروسافت میخواهد با هر ترفندی حتی کمتر شدن سود
Platform خودش را گسترش بدهد و بعد با استفاده از این  
business solutons خود را توسعه بدهد 

معذرت میخواهم زیاد حرف زدم مبحث جالبی بود  :)

----------


## مهدی کرامتی

> چون مایکروسافت هم MFC رو ارتقا داده هم IDE رو قدرتمدتر کرده و خلاصه کلی بهش رسیده.


کی چنین حرفی زده؟
MFC از نسخه 6 فرق چندانی نکرده و جزو اولین چیزهایی است که در لانگهورن نخواهد بود.

----------


## مهدی کرامتی

خانم مونا:
مطمئن نیستم چیزی که شما از سایت مایکروسافت نقل قول کرده‌اید همانی باشد که من در آنجا دیدم.

نکته قابل ذکر این است که مواردی که عرض شد هنوز در ملاء عام اعلام نشده است و در جلسه‌ای که برای همکاران رده طلایی و نقره‌ای مایکروسافت بعنوان جلسه آشنایی با برنامه‌های آینده برگزار شد اعلان و اکران شده است.

----------


## کم حوصله

خوب در نهایت با تمام مباحثی که شد حالا با ید چه کرد؟؟؟

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

C#‎    VB.NET   DELPHI.NET   

و مسئله دوم اینکه مثل منی که تقریبا با وی بی 6 کار کردم و مجبور به تقییر در منش برنامه نویسی در جهت پرش به .NET  دارم کدام را پسشنهاد می کنید که برگزینم و شروع به فراگیری کنم

نکته : بادر نظر گرفتن سیستم های فقط پایگاه داده ای و تحت شبکه محلی (قابل ارتقا به شبکه های جهانی )

----------


## Monaa

> چون مایکروسافت هم MFC رو ارتقا داده هم IDE رو قدرتمدتر کرده و خلاصه کلی بهش رسیده.
> 			
> 		
> 
> کی چنین حرفی زده؟
> MFC از نسخه 6 فرق چندانی نکرده و جزو اولین چیزهایی است که در لانگهورن نخواهد بود.


  MFC 7نسبت به نسخه قبلی به مراتب بهتر شده است . حجم کل
  Library کم شده است و باگهای نسخه قبل برطرف شده اند و چندین
 کلاس جدید هم به آن اضافه شده است 
 حجم کدهائیکه با  MFC نوشته شده اند آنقدر زیاد است که مایکروسافت
 برای مدتها آن را نمیتواند رها کند 
  تعداد بیشماری از بزرگترین نرم افزارها و تعداد خیلی زیادی از شرکتهای
تولید نرم افزار در سراسر دنیا برای حداقل 6 سال بطور مداوم از  MFC برای
 تولید برنامه هایشان استفاده کرده اند از ویژوال سی 3 تا ویژوال سی 6

  بنابراین فکر نمیکنم ذات منفعت طلب مایکروسافت موافق با از دست دادن
یا ناراضی شدن این تعداد زیاد مشتری باشد و احتمالا برای سازگاری 
برنامه های  MFC در محیط لانگهورن هم فکری خواهند کرد
شاید کاری که برنامه نویسان  FreeBSD و  Solaris انجام دادند و ابزاری
تولید کردند که توسط آن میتوان برنامه های اجرائی لینوکس را روی این یونیکسها
هم اجرا کرد باز هم توسط مایکروسافت به شکلی دیگر تقلید شود

----------


## Monaa

> خانم مونا:
> مطمئن نیستم چیزی که شما از سایت مایکروسافت نقل قول کرده‌اید همانی باشد که من در آنجا دیدم.
> 
> نکته قابل ذکر این است که مواردی که عرض شد هنوز در ملاء عام اعلام نشده است و در جلسه‌ای که برای همکاران رده طلایی و نقره‌ای مایکروسافت بعنوان جلسه آشنایی با برنامه‌های آینده برگزار شد اعلان و اکران شده است.


 هر زمان که وقت کردید بررسی کنید و ببینید حرفهائیکه من زدم
 همان چیزی بود که شما گفتید یا اصلا مطلب شما یک چیز دیگر بوده است 
  اما در مورد بخش دوم صحبت شما راستش کمی باورش برای من سخت است
 به این علت که اولا چیزی که شما توصیف کردید بصورت منطقی
 و علمی امکان پذیر نیست ( اگر دوست دارید میتوانم توضیح بدهم چرا
اینطور فکر میکنم ) یعنی یک نرم افزار مستقل و یک  Package نمیتواند
 نیازهای یک شرکت را بگیرد و آن را تبدیل به برنامه قابل اجرا کند
 چون پیچیدگی های  business logic و جزئیات کدهای برنامه و ...... آنقدر زیاد
است که ممکن نیست ...... سالهاست که محققان دانشگاههای مختلف دارند روی
 نرم افزاری که بتواند نیاز را بررسی کند و برنامه بنویسد کار میکنند
 اما حتی پیشرفته ترین تکنیکهای هوش مصنوعی هم موفق به انجام آن نشده اند
پس مایکروسافت نمیتواند به تکنولوژی تولید خودکار برنامه دسترسی داشته باشد
 ( اگر منظور شما را غلط فهمیدم یا حرف شما چیز دیگری بوده لطفا
توضیح بدهید ) 
 :)

----------


## مهدی کرامتی

بعید میدانم.

چراکه هدف مایکروسافت فقط سوق دادن همه به سوی دات نت است و در این راستا از هیچ حرکتی فروگذار نخواهد کرد.

در لانگهورن تنها کتابخانه‌ای که بصورت رسمی پشتیبانی میشود دات نت است و این در همه مستندات جدید مایکروسافت ذکر شده است.


مواردی که بیان شد صرفا برداشت من نیست، بلکه نقل قولی است از مواردی که  مایکروسافت به همکاران نزدیکش اعلام کرده است.
تنها کاری که ما اکنون میتوانیم بکنیم این است که بنشینیم و ببینیم در آینده چه اتفاقی خواهد افتاد.

----------


## Abbas Arizi

:shock: 
مونا خانوم. نمیدونم چرا طرز صحبت کردن و یه سری خصوصیات دیگه شما عجیبب من رو یاد کسی میندازه.  :متفکر:  
بگذریم. ولی به هر حال از صحبتهاتون حظ وافر بردم.

----------


## Monaa

وای   :گیج:  
 آقای اسیستنت شما چطور  اینقدر سریع جواب میدهید ؟ 
 من مطلبم را پست کردم و صفحه Referesh شد و جواب
 شما زیرش بود   :گیج:   شما مطمئنید روبات نیستید ؟  (:D)

----------


## مهدی کرامتی

:P

----------


## vDelphi

فقط یه سوال:
تکلیف کسایی که سیستم نویسی می کنن چیه؟ چون فکر نکنم بشه با net. برنامه های سیستم نوشت!

----------


## Abbas Arizi

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

----------


## Monaa

اینجا را هم ببینید :
http://wesnerm.blogs.com/net_undocum.../10/winfx.html

----------


## مهدی کرامتی

جالب بود. اما این یک تکامل است یا یک انقلاب؟

----------


## Best Programmer

به قول یکی از دوستان : We go where the money go
حالا ما با این به اصلاح انقلابات یا اختراعات یا چرندیات یا هر چی که دوستان دوست دارند بگند کاری نداریم. اگر خریدارانمان به روز شدند ما هم به روز میشویم. ولی خوب باید بلد باشیم تا از قافله عقب نمانیم ولی نه انقدر که جمله بالا فراموش شود

----------


## zehs_sha

ehsaanjoon سلام 
من مدتی با vb.net برنامه نوشته ام زبان خوبی است اما از هنگامی که در سایت میکروسافت دیدم که کد  vb.net در Whidbey  پنجاه در صد کد آن تغییر خواهد یافت فهمیدم که این زبان متزلزل است و آن را رها کردم و به سوی #C آمدم از آنجا که دوستان هم اشاره کردند برگ برنده میکروسافت #C است پس ممکن است vb.net نیز از رده خارج شود (شاید)

این نمونه مثال از سایت میکروسافت است.


Visual Basic .NET 2003 Const GreetingName As String = "Greeting"
Dim sDisplay As Object
Dim ResMgr As ResourceManager
ResMgr = New ResourceManager&#40;"ResourcesSample.MyStrings",_
        Me.GetType.Assembly&#41;

sDisplay = ResMgr.GetString&#40;GreetingName&#41;
 

Visual Basic Whidbey


 My.Resources.MyStrings.Greeting 
 


این هم آدرس مقاله :

http://<br />
<a href="http://msdn....aspx</a><br />

من دلیل اینکه اول vb.net را انتخاب کردم این بود این بود که با vb6  برنامه نویسی می کردم و برایم یادگیری آن بهتر بود اما پس از دیدن مقاله فوق برنامه نویسی را با C#‎ شروع کردم و هر آنچه که آموخته داشتم از VB.net در #C استفاده کردم (فقط زبانش c) بود

و به نظر من #C خیلی بهتر است تا vb.net از لحاظ نوشتن کد و شی گرائی (من که اینطور احساس کردم)

در مورد Delphi.Net 
زبان بی خودی  است زیرا دیگر  برای Borland نیست همه چیز آن دیگر میکروسافتی است 
خدا بیامرزد Delphi را که چیز دیگری بود به نظر من مسخره بازی است یا  تعصب است کسانی که می گویند Delphi.Net فلان است بیسار است ..........
دلیل حرفم اینکه Delphi.Net ار فرم ورک میکروسافت استفاده می کند و هر سازی که میکروسافت بزند borland هم باید برقصد .
اگر یک روز میکروسافت بازی .Net را جمع کرد و بازی جدیدی را شروع کرد Borland هم باید Delphi.Net  را جمع کند و منتظر شود که ببیند میکروسافت چه بازی دیگری را شروع می کند آیا اصلا Borland را بازی می دهد یا ه اصلا جزء نخودی قرارش می دهد 

گفتم نخودی ها :
Borland الان نخودی است کسانی که تعصب دارند نمی توانند قبول کنند اما حقیقت تلخ است به این دلیل که :
Borland زمانی Delphi.Net را داد که میکروسافت قرار است  "Whidbey" (2004). را بدهد و فرم ورک آن نیز فرق می کند در حالی که  فرم ورکی که Delphi.Net  استفاده می کند 1.1 است پس یک سال تو آفساید است 

پس اگر می خواهی برده خوبی برای خود و میکروسافت باشی چنانچه که Borland با آن همه عظمت شد بهتر از C#‎ انتخاب کنی تا کمی از دست این ا ستکبار راحت باشی اما بدان که تو یک برده ای و اربابت هر بازی که می خواهد سر تو در می آورد تازه تو راحتی زیرا برای .net پولی نمی دهی وای به روزی که قانون کپی رایت در ایران رعایت شود.

بدان و آگاه باشید که میکروسافت یک استکبار است یک انحصار طلب 
در میکروسافت یک مشت کن ذهن از لحاظ علم کامپیوتر وجود دارند که رشته اصلی آنها انحصار طلبی است آنها 24 ساعته 
به فکر انحصار طلبی  :دلار:  هستند یک مشت نخبه در انحصار طلبی و استکبار نه یک جمع علمی 

تو فکر می کنی چرا باید میکروسافت قسمت زبان فارسی در ویندوز قرار دهد یا اینکه چرا باید در نسخه Whidbey راضی شود تقویم جلالی را قرار دهد چون که ما قانون کپی رایت را رعایت می کنیم و پولی می دهیم یا اینکه دلش برای شیعه نشینان ایران (که می خواهد سر به تن ما نه باشد)سوخته است نه عزیز همه این کاره برای این است که تمامی دنیا برده او شوند حال یکی مزدور است مثل Borland که برای بقای عمرش مجبور است سر بسپارد و چارهای جز این ندارد(چون سیستم عامل دست میکروسافت است) یا مثل من و تو همانند مغ و خروسی هستیم که برای ما دانه می ریزد و ما را به دام می اندازد چند صباحی هم برایش قوقولی قو قو ل می کنیم بعد یک روز  هم می بینی سرهایمان را می برد یا اینکه نهایتا در قفس هستیم و برایش تخم می کنیم و در آخر  هم  در قفس می میریم و من تو هم راضی هستیم چون که می گوئیم در قفس هستیم و از دست شغالان و گرگان و روباهان در آنانیم و بس بسنده کرده ایم به دانه ها و ته مانده غذا ها 

دوست من دنبال کردن راه میکروسافت دنبال کردن به معنی دنبال کردن مسیر همیشگی و ابدی میکروسافت برای /ارتقاء / وصله / پرداخت هزینه است 
و این را بدان تا زمانی که ضعیف نباشد ظالم به وجود نمی آید دنبال کردن راه میکروسافت همانند دنبال کردن راه آمریکا برای جهان تک قطبی است .

ببخشید اگر زیاده گوئی کردم و مثال هایی که  آوردم نسبت به دوستان نداده ام و برای شرح ماجرا بود  :مخالف: 
و صرفا نظر اینجانب بود می دانم که کارم به پایان رسده چون هم دوستان Delphi کار و هم دوستان میکروسافت از دست من دلخورا که من ازآنها معذرت می خواهم.

----------


## مهدی کرامتی

*دوست عزیز، zehs_sha*:
به شما حق میدهم که اینطور در مورد Delphi.Net قضاوت کنید، چرا که اطلاعات کافی درباره آن ندارید.
بعنوان یک دوست توصیه میکنم قبل از اینکه در مورد چیزی اینطور اظهار نظر کنید کمی درباره آن مطالعه کنید.




> به نظر من مسخره بازی است یا تعصب است کسانی که می گویند Delphi.Net فلان است بیسار است


یعنی شما میفرمایید تمام جزئیات فنی که در بحثهای اخیر در مورد امکانات Delphi.Net و برتری‌های آن نسبت به #C و ... مطرح شده است مسخره‌بازی است؟!




> Borland زمانی Delphi.Net را داد که میکروسافت قرار است <span dir=ltr>"Whidbey" (2004)</span> را بدهد و فرم ورک آن نیز فرق می کند در حالی که فرم ورکی که Delphi.Net استفاده می کند 1.1 است پس یک سال تو آفساید است


دات نت فریم ورک در نسخه بعدی چیزی را حذف نکرده است، بلکه فقط امکانات اضافه کرده است. بنابراین برنامه‌های کنونی که با استفاده از Delphi.Net یا #C یا VB.NET نوشته شده‌اند بدون کوچک‌ترین تغییری روی دات نت فریم ورک 1.2 (معروف به Whidbey) اجرا خواهند شد.
ممکن است تغییراتی در ساختار زبان VB.NET داده شود، اما این فقط یک تغییر برای VB.NET است و الزاما بدین معنا نیست که زبانهای دیگر دات نت هم میبایست چنین تغییری را متحمل شوند. 

حتی اگر شما نخواهید از ساختار جدید زبان VB.NET استفاده کنید میتوانید با همین دانش کنونی به نوشتن برنامه در آن ادامه دهید و زمانی تغییرات جدید را بکار ببندید که خودتان ترجیح میدهید.

*درباره Delphi.Net :* 
صرف اطلاع شما Delphi 9 که در حقیقت نسخه دوم Delphi.Net است در حال حاضر مراحل نهایی تست و کنترل کیفیت را میگذراند و با فاصله (نهایتا) 40 روز پس از ارائه <span dir=ltr>.Net Framework 1.2</span> ارائه خواهد شد.

عطف به مطالبی که در پاراگراف بالاتر عرض شد آمدن <span dir=ltr>.Net Framework 1.2</span> بدین معنا نیست که برنامه هایی که اکنون با دلفی 8 نوشته میشوند در نسخه جدید فریم ورک کار نخواهند کرد، بلکه امکاناتی در نسخه جدید فریم ورک وجود خواهد داشت که اکنون در دلفی 8 پشتیبانی نمیشوند و برای استفاده از مزیت بکار بردن آنها میبایست نسخه جدیدتر Delphi.Net (یعنی Delphi 9) را استفاده کنید.

*با صحبتهای شما درباره انحصارطلبی مایکروسافت* و *پیروی از سیاستهای استعماری آمریکا موافقم.*
در بحثی که چند وقت پیش درباره سیستم عامل ملی شد دلایلی آوردم که بیانگر این بود که تغییر سیستم عامل به لینوکس به این آسانی‌ها نیست، اما چرا؟
فکر میکنید مایکروسافت به چه دلیل پشتیبانی زبان فارسی را به ویندوز اضافه کرده است؟ من بعید میدانم دلیل اینکار بقول خودشان "_خوش کردن دل تعدادی هندی علاقه‌مند به زبان فارسی که میخواسته‌اند بتوانند اشعار فارسی را در کامپیوترشان تایپ کنند_" بوده باشد!
دلیل اینکار چیزی نیست بجز آلوده کردن مردم فارسی زبان به استفاده از محصولات مایکروسافت!

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

این چیزی است که از اولین روز قرار دادن زبان فارسی در ویندوز توسط آنها پیش بینی شده بود: معتاد کردن مردم به استفاده از یک چیز راحت، سپس دریافت پول برای تامین ادامه مواد موردنیاز قربانی!

----------


## مهدی کرامتی

> تکلیف کسایی که سیستم نویسی می کنن چیه؟ چون فکر نکنم بشه با net. برنامه های سیستم نوشت!


درسته. مایکروسافت تلاش میکند تا حد ممکن دست برنامه نویسان سیستم را ببندد تا خودش بتواند سیاست بازار اینگونه محصولات را نیز تعیین کند.

برنامه نویسان سیستم مجبور خواهند بود یا از استانداردهای مایکروسافت پیروی کنند، یا اینکه سیستم عامل دیگری را انتخاب کنند.

----------


## Monaa

> جالب بود. اما این یک تکامل است یا یک انقلاب؟


  انقلاب   :)

----------


## zehs_sha

آقای  DelphiAssistant 
سلام خسته نباشید 
منظور من این است که Delphi.net  نیز هرچقدر قدرت و برتری داشته باشد (قابل قبول) بالاخره از .net استفاده می کند و آخر قدرت  Delphi.net در Net Framework  میکروسافت ببینی حال ممکن است یک دو ابزار هم قوی تر برای Generate کردن کد و یا تولید ابزار داشته باشد ولی در نهایت .net است (من منظورم این بود)
یعنی امکانات delphi.net هر چی باشه در Net Framework  میکروسافت است آیا به نظر شما غیر از اینه 

من در روزهای اول که میکروسافت Net Framework را می خواندم و در مقاله های میکروسافت نوشته بود که در صف زبانه قرار است زبان پاسکال هم قرار بگیرد که درست از آب درآمد(delphi.net)

حال بورلند هم آمده یکی دوتا امکانات بیشتر قرار داده ولی در آخر خودش از کلاسهای .net میکروسافت استفاده می کند 

الان میکروسافت باشرکت های زیادی کار می کنه خوب borland هم روش  پس بورلند زیر شاخه میکروسافت و میکروسافت هم ریشه 



به نظر من افرادی که با delphi.net کار می کنند آنها دیگر نباید بر علیه میکروسافت صحبت کنند چون در اصل آنها جزئی از میکروسافت هستند.


Microsoft.Net=Borland.Net=Delphi.Net






> ممکن است تغییراتی در ساختار زبان VB.NET داده شود، اما این فقط یک تغییر برای VB.NET است و الزاما بدین معنا نیست که زبانهای دیگر دات نت هم میبایست چنین تغییری را متحمل شوند.


منظور من این بود که vb.net زبان متزلزلی است و میکروسافت آنقدر دنبال انحصار طلبی است که نمی تواند طوری برنامه ریزی کند که از بدو تولد یک زبان دوباره آن را تغییر ندهد.آنقدر آدمهای کودن در آن شرکت هستند که نتوانند یک زبان را به درستی طرح ریزی کنند و از طراح دلفی استفاده کنند.

و در آخر 




> دوست عزیز، zehs_sha: 
> به شما حق میدهم که اینطور در مورد Delphi.Net قضاوت کنید، چرا که اطلاعات کافی درباره آن ندارید. 
> بعنوان یک دوست توصیه میکنم قبل از اینکه در مورد چیزی اینطور اظهار نظر کنید کمی درباره آن مطالعه کنید.


دوست عزیز DelphiAssistant
به شما حق می دهم که در مورد من اینجور قضاوت کنید چون شما صحبت های من را با دقت نخوانده اید

----------


## zehs_sha

> انقلاب


انقلاب در برده داری و رفتن زیر بار یوغ استعمار از پشت کامپوتر های شخصی

----------


## Monaa

> به شما حق می دهم �ه در مورد من اینجور قضاوت �نید چون شما صحبت های من را با دقت نخوانده اید


 دوست گرامی من حرفهای شما را دو بار با دقت خواندم
 نه تنها با نظر آقای دلفی اسیستنت موافقم احساس میکنم
  مطالب شما دارای چهارچوب و اسلوب منطقی نیست و صرفا
 به دنبال گریزی برای "ضایع" کردن بورلند بودید که اینجا به لطف
دات نت این فرصت را پیدا کردید  من در مورد مطالب شما حرف خاصی
 ندارم اما فکر میکنم آدم برای اظهار نظر در مورد یک مطلب باید
 بطور کامل بر آن احاطه داشته باشد . در غیر این صورت مطالبش
 در حد همان شعار یا داد و بیداد باقی خواهد ماند و فقط به درد
افرادی که اینطور مطالب را میپسندند خواهد خورد .
 اطلاعات من در مورد دات نت خیلی کم است
 اما همینقدر میدانم که بین زبانهای استفاده کننده از دات نت
هیچ فرقی وجود ندارد چون همگی به  IL تبدیل میشوند و همگی
 از استاندراد  ECM برای تولید کد استفاده میکنند . یعنی نظرات
شما در مورد  VB .NET و فرق آن با سی شارپ به هیچ وجه علمی
 و صحیح نیست . بورلند هم کار عجیب یا خارق العاده ای نکرده است
 که اینطور بی رحمانه به آن میتازید . همین حالا حدود سی زبان  برنامه نویسی
دات نت را حمایت کرده اند . از SmallTalk قدیمی گرفته تا  TCL که بیشتر
روی یونیکس کاربرد دارد تا  PERL و ......... حالا بورلند هم یک دلفی دات نت
تولید کرده است . اگر به دنبال ابراز قضاوتهای شخصی و بدون
 دلیل خود هستید شاید چنین محیطهائی مناسب نباشد
 بخشی از حرفهای آقای اسیستنت در مورد دلفی دات نت برای من
 جالب بود ( قبلا نمیدانستم ) و در دلم یک آفرین به بورلند گفتم 
 حالا شاید شما اینطور فکر میکنید که هرر کسی باید خودش یک
سیستم عامل بنویسد ...... یک کامپایلر بنویسد ....... یک فریمورک بنویسد ......
( عطف به مطلب شما در بخش سیستم عامل ملی ) اما واقعیت این
است که آدمهای زرنگ سعی نمیکنند برای رسیدن به نوک
یک درخت بلند از ابتدا خودشان نردبان بسازند  بلکه چند تا بردبان بلند و
محکم و قابل اعتماد را به هم وصل میکنند و وقتی به آن مطمئن شدند
بالا میروند ( این فقط یک مثال بد بود ) ....... من هم مانند شما سیاستهای
انحصاری مایکروسافت را نمیپسندم اما نمیخواهم چشمم را بروی
فعالیتهای مثبت آن هم ببندم . میگویند دات نت خیلی خوب وقدرتمند
است . این را از بسیاری از دوستان با سوادم هم شنیده ام
 ( خودم فرصت یادگیری ندارم ..... اما شاید در همین عید ....... :)  )
 اگر چیزی واقعا" خوب است چرا آدم نباید از آن استفاده کند ؟
هر چند که هر چیزی خرج دارد و باید هزینه ای برایش پرداخته شود
 و طبیعی است اگر شما میخواهید راحت با کامپیوتر کار کنید ......
دردسرهای محیطهای یونیکس را نداشته باشید ..... راحت برنامه بنویسید و .....
 باید با بعضی از مشکلات مایکروسافت هم بسازید و تحملش کنید .....
 دنیا اصلا همین است  :)  امیدوارم از حرفهای من ناراحت نشده باشید اما به
شما توصیه میکنم فقط در مورد مطالبی حرف بزنید که بطور کامل در
 مورد آن احاطه دارید ........ امیدوارم همه ما همینطور باشیم  :)

----------


## zehs_sha

نقل قول 



> صرفا به دنبال گریزی برای "ضایع" کردن بورلند بودید


 :evil:  
آخه پدر کشتگی دارم با برولند  :?: 
تازه اگر هم به دنبال "ضایع" کردن برولند بودم عطف به حرف شما مثل شما به کسی توهین نکردم 
شما هر آنچه که خواسته اید به من نسبت داده اید من هم فکز می کردم می توانم مانند بقیه نظر های شخصی خود را بنویسم و اصلا هم نظرم را منطقی نخوانده ام 
شما به چه حرفهایی منطقی می گوئید و ملاک شما برای حرفهای منطقی چیست آیا نه اینکه حر فهایی که باب نظر شما باشد حرف منطقی و اگر حرفی هم خوشایند شما نباشد غیر منطقی است 

اگر اظهار نظر هایم غیر منطقی است باشد بگذار هر خواننده در مورد من قضاوت کند چرا شما در مورد من پیش داوری می کنید حرفهای من هم اگر داد بیداد باشد(عطف به حرف شما) حداقل دل کسی را بدرد نیاورده ام و به کسی توهین نکرده ام 

نقل قول 



> اگر به دنبال ابراز قضاوتهای شخصی و بدون 
> دلیل خود هستید شاید چنین محیطهائی مناسب نباشد


من در این محیط آزادم که نظر شخصی ام را بدهم حال ممکن است که از نظر شما مطقی نباشد
اما این  محیطها جهت  بستن توهین و افترا به شخصی خاص  محیطهائی مناسب نمی باشد شما می توانستید از طریق PM هرجه بد بیرا می خواستید به من بگوئید نه جلوی دوستان 

خانم مونا توهین کردن به افراد کار سختی نیست همه ما بلد هستیم اما بستگی به  شخصیت آدمها  دارد که چقدر......
من هم می توانم راحت هر آن چه که از نظرم می گذرد بنویسم اما من حرمت قلم (کی بورد) را حفظ می کنم و نیاز به این ندارم که با ضایع کردن دیگران خود نشانی کنم و خود را آدم با سوادی نشان دهم (مخصوصا در این جامعه مجازی واقعا آدم باید.....) 

شما خیلی راحت می توانستید نظر های خود را بگوئید چه نیازی بود که به من توهین کنید 

 :roll: 
آخر هر تاپیک به اینجا ختم می شود بعد هم شخص ثالثی می آید می گوید بس است آسمان دارد ابری  می شود اما نیاز نیست من میروم من  نمی توتنم در جایی نظر هایم را بنویسم که شخصی بیاید و توهین کند و آخر هم با کمال .....بگوید امیدوارم از حرفهای (توهین ها) ناراحت نشوید 

نقل قول 



> شما توصیه میکنم فقط در مورد مطالبی حرف بزنید که بطور کامل در 
> مورد آن احاطه دارید


شما توصیه میکنم فقط در مورد مطالبی حرف بزنید که به شخصیت آدمها توهین نشود.

من هم اگر توهینی کردم به شرکتی بوده است شخص خاص مد نظرم نبوده است 
 اینجا هوایش نامناسب است و استفائ اینجانب از بحث :(

----------


## Monaa

دوست عزیز از اینکه از حرفهای من رنجیده اید متاسفم  :| 
  البته عذرخواهی لازم نیست چون من نه توهین کردم و نه حتی 
 حرف تندی زدم و این همه سر و صدای شما فقط بخاطر یک
توصیه دوستانه من است که گویا تحمل ان را نداشته اید  :) 
 بهر حال هر زمان که فکر کردید میتوانید بدون داد و بیداد و فقط
در قالب مطالب مستند و علمی در مورد مساله ای بحث
 کنید و زود از حرفهای دیگران ناراحت نشوید خوشحال میشوم
 حرفهای شما را بشنوم 
 متاسفانه یکی از مواردی که در این سایت به وفور به چشم میخورد
 ( بر خلاف خیلی از سایتهای مشابه خارجی ) نوشتن مطالب
 بدون اطلاع و دانش است و شما هم اگر مطالبتان اینطور نبود
بهتر بود در مورد مسائل فنی موجود در مطلب من حرف میزدید 
بهتر است کمی دیدتان را نسبت به "توهین" تغییر دهید 
  :)

----------


## hosseinzadeh

سلام
من قصد بحث کردن در این مورد را ندارم.چون فایده ی چندانی ندارد و باعث ایجاد کدورت می شود.در نهایت هم هر کس به راه خودش می رود و تغییر چندانی در افکار ایجاد نخواهد شد.اما در مورد:



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


به صورتیکه شما تصور می کنید،غیر ممکن است.این رو من و کسانی که به فکر سیستم عامل ملی هستندهم  می دانند.اما مساله اینجاست که سیستم عامل ملی به معنی تغییر سیستم عامل تمام رایانه ها نیست.توجه داشته باشید این کار حد اقل در مورد ایران غیر ممکن است.چون بسیاری از افراد تصوری از «رایانه ی بدون ویندوز » را ندارند.و فکر می کنند ویندوز جزء لاینفک رایانه است.(البته ایت مورد در مورد افراد آماتور صحیحه نه افراد حرفه ای و نیمه حرفه ای)پس ویندوز بیشتر از یک سیستم عامل یک فرهنگه.گرچه فرهنگ درستی نیست( :evil2: ) ولی وجود داره.منظوره از سیستم عامل ملی اینه که کارهای رسمی دولت توسط این سیستم عامل انجام بشه.یا بستر کارها لینوکس باشه.یا یک نمونه دیگش اینه تمام سرورهای دولتی از لینوکس استفاده کنند.تا حداقل دولت از هزینه کپی رایت خلاص بشه.مردم هم اگه بخواهند می توانند مهاجرت کنند و اگر نخواهند که هیچ.ولی این احتمالا یکی از مقدمات پذیرش کپی رایت است.توجه داشته باشید بسیاری از کشورها به اوپن سورس مهاجرت کرده اند(ر.ک:مبحث سیستم عامل ملی)شما که دیگه خودتون در مورد انحصارطلبی مایکروسافت همه چیز رو می دونید.
بنابراین:
با ایجاد سیستم عامل ملی مشکلی برای آینده کاری من و شما و بقیه ایجاد نخواهد شد.همون طور که برای برنامه نویسان دیگر کشورها مشکلی ایجاد نکرده.
به هر صورت:به جای این حرفها به فکر عید باشید که در پیشه.سیستم عامل ملی رو هم یه کاریش می کنیم.
برای اطلاعات بیشتر ر.ک:
http://farsilinux.org
 :D

----------


## مطهر

سلام
تا به حال چندین مقایسه بین زبانهای گوناگون انجام گرفته است و به نظر من این کار ها با همه ی محاسنی که دارند معایبی هم دارد و تقریبا می توان گفت که این کار مشوش کردن ذهن برنامه نویسان غیر حرفه ای(از جمله خودم) است . دو ستان توجه داشته باشند که ما فرصت یاد گیری تمام زبانها را نداریم در ضمن فرصت از این شاخه به اون شاخه پریدن را هم نداریم . یک روز از مزایای VB.NET  گفته می شود (حالا هم آن را زبانی متزلزل می نامند) روز دگر درباره ی Delphi حالا هم  :  shock:  :shock:  #Cوتازه سیتم عامل ملی  :?: و از انحصار مایکروسافت بیرون آمدن و بر نامه نویسی برای لینوکس  :-x  :roll: مانده ایم کدام را ادامه دهیم .
(یکی نیست به این برنامه ریزان مملکتی  :?: بگوید تا به حال چند هزارتومان به مایکروسافت داده ایدکه حالا می خواهید از انحصار آن بیرون بیایید.نیست که شرکت لینوکس سیتم عاملش را مجانی به ما می دهد.باید قبول کنیم که خودمان نتوانسته ایم ... ما هم بدمان نمی آید سیتم عامل ملی داشته باشیم ) 
 از یک طرف می خواهیم از غافله عقب نمانیم از طرف دیگر هنوز راه را پیدا نکرده ایم .
از دوستانی که بر مسایل روز اشراف دارند به ما بگو یند بالاخره چه کار کنیم ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟  ؟؟؟ :?:

----------


## مهدی کرامتی

> از دوستانی که بر مسایل روز اشراف دارند به ما بگو یند بالاخره چه کار کنیم


خودتان بهترین راه را انتخاب کرده‌اید:



> پیش به سوی NET.

----------


## مطهر

> از دوستانی که بر مسایل روز اشراف دارند به ما بگو یند بالاخره چه کار کنیم
> 			
> 		
> 
> خودتان بهترین راه را انتخاب کرده‌اید:
> 
> 
> 
> 
> ...


ولی کدامیک? :?: 
VB.NET  ? C#‎? Delphi.NET

----------


## مهدی کرامتی

هر کدام که با آن راحت تر هستید.

----------


## shaniaki

با عرض ادب:
یه لینک دستم گرفته بودم و همینجوری می گشتم نمی دونستم کجا بذارمش. گفتم بذازم اینجا:

http://lug.farsilinux.org/PDF%20File...opensource.pdf
کسی سمینار این بابا رو گوش داده؟

یه عشق برنامه نویسی خفن

----------


## ehsaanjoon

خیلی خیلی ممنون از دوستان که جواب منو دادن
اگه می شه لطفا کتابی در مورد مباحثی چون C#‎ مدیریت پروژه طراحی الگوریتم و ... معرفی کنید.
یه چیز دیگه:من تصمیم گرفته بودم C#‎ بخونم ولی با چیزهایی که این اواخر از delphi.net شنیدم و تجربه ی کمی که در برنامه نویسی delphi دارم دوباره به شک افتادم.
لطفا یکی از اساتید زحمت بکشن و این شک من رو بر طرف کنن :oops: 
راستی سعی کنیم این دم عیدی بیشتر به همنوع خودمون کمک کنیم :wink: 
شاد باشین

----------


## مطهر

به قول آقای نصیری
سی شارپ گواهی ایزو گرفته 
من هم تصمیم گرفته ام سراغ سی شارپ برم.

----------


## vDelphi

ولی من delphi.net را ترجیح می دم. مهم اینه که با کدومشون راحتتر هستی.

----------


## SSP_Software_team

خانوم مونا من رو هم بد جووووووووووری شدیییییییییییییدا به یاد یکی میندازه که.... :o 
وای بلا به دور عباس جان گرفتم گرفتم....... 8)

----------


## Anti_Evil

میدونید ؟! من در مدت عضویتم در این سایت یکی از بزرگترین اشتباهاتمو مرتکب شدم ):
چرا که این توپیک رو اصلا نگاه نکردم )):
آخه فکرشو نمیکردم بحث تا اینجاها گسترش پیدا کنه.
باید فکرشو میکردم که حتما چیزی بوده که توجه دیگران جلب شده ...

ولی از یه جهت خیلی خوشحالم، از این جهت که در غیاب بنده خانوم Mona زحمت کشیدند و با اطلاعات خودشون همه را در بسیاری از موارد روشن کردند. واقعا ممنون X:
البته دوست داشتم Mona خانوم در جواب ها بیشتر توضیح میدادند که جای شبهه ای برای کسی باقی نماند ولی با توجه به حساسیت موضوع و زمان ارسال جواب ها واقعا جای تقدیر دارد. (:

البته من دقیقا منظورم در مورد وضعیت و آینده MFC بود.

آقای کرامتی با این پاسخ هایشان باعث شدند من 2 دقیقه در کمای مطلق فرو بروم (:
خوب بگذریم ...

من تمام سوالهای پرسیده شده در مورد MFC را بخاطر ندارم ولی بزرگترین چیزی که الان به خاطرم میرسد در مورد آینده  MFC است ...
Microsoft پشتیبانیشو از روی MFC بر نخواهد داشت. ( اگر چیزی ضد این شنیدید بدونید کذبه )

من واقعا در عجبم که چرا آقای Inpy در این مورد تا به حال چیزی ننوشته اند ؟!
شاید ایشان هم نظیر بنده دچار افسون ( ندیدن این تاپیک ) شده باشند ...

در آخر به جمله ای از یکی از پیامبران برنامه نویسی ( Tom Archer ) اشاره میکنم که فرمود: *++C کار کنید تا رستگار شوید.*

اگر همچنان کسی در مورد جزئیات مربوط به ++VC و MFC سوالی دارد من از الان در خدمتم (:

----------


## Inprise

برادر Anti-Evil 

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





> متاسفانه یکی از بلاهائیکه دامن گیر محیطهای تکنیکی مثل این وب سایت است "حال گیری" ضمن بحث و تبادل نظر با طرف مقابله . این پدیده اگر جنبهء شوخی داشته باشه و برای ایجاد تنوع در محیط بحث اتفاق بیفته البته مباح که هیچ بلکه مستحب است . اما اگر یک نفر خیلی جدی تصمیم بگیره حین بحث و تبادل نظر بخاطر عدم تطابق نظرش با فرد مقابل یا احیانا" حقیر شمردن فرد مقابل سعی کنه حالش رو بگیره ، تصریحا" یا تلویحا" ، نتیجه ای جز خراب شدن فضای بحث و مالیده شدن نتیجه گیری صحیح و منطقی نخواهد داشت . بارها دیدم که وقتی بین دو تا مساله خاص تو مایه های دلفی و وی بی ، ویندوز و لینوکس ، دات نت و جاوا و ... بحثی بین دو یا چند نفر شروع میشه ، از همون ابتدا حرفهای حاشیه ای و تیکه ها حال گیر و مطالب نا مربوط متولد میشن و تا آخر بحث به حیات خودشون ادامه میدن . طبیعیه که ایجاد چنین فضائی باعث میشه بعد از مدتی تمام کاربران سایت با دیدن بحثی این چنین میل و رغبتی برای حضور در اون نداشته باشند چرا که حدس میزنن به احتمال زیاد این وسط حال چند نفر اساسی و حال چند نفر غیر اساسی گرفته میشه و ته داستان چیز خاصی عاید کسی نمیشه . ( اتفاقی که همین حالا تا حدودی افتاده است ) . این نوع رفتار و برخورد فوق العاده مخرب است و به طور جدی و اساسی باید جلوش گرفته بشه . واضح و مبرهن است که یک بحث داغ و خیلی تند و حتی خشن اما تکنیکی اگر هیـــچ فایده ای نداشته باشه ، حداقل کمک میکنه وجوه مختلف موجود یا موجودات مورد بحث توسط طرفین کاملا" بررسی بشن و در بدترین حالت حداقل یه تعداد  Keyword و عنوان جدید به دست تازه کارهائی که مدتی بعد دارن اون بحث رو مطالعه میکنن میرسه که حتما" میتونه براشون مفید باشه ، تیکه پرونی و حال گیری نه تنها باعث خط خطی شدن اعصاب طرفین بحث میشه ، و نه تنها "بحث" رو به "مشاجره" تبدیل میکنه ، که باعث میشه به مرور پدیده "بحث" به یک موجودیت مضموم تبدیل بشه که همه ازش فراری هستند ( که همین حالا هم متاسفانه تا حدودی همین طور شده ) . امیدوارم همه رفقا ، از خود این حقیر گرفته تا ...سعی کنیم بجای نگاه عاقل اندر سفیه به طرف مقابل و گل مال کردن حس و حال و اعصاب طرف ، سعی کنیم اگر چیزی در چنته داریم بریزیم رو دایره و اگر حرف خاصی نداریم گوش کنیم و یاد بگیریم و البته اظهر این است که مدیران ، از مدیر سایت گرفته تا مدیران بخشها باید حساسیت خاصی رو این رفتارهای مخرب داشته باشن و بدون کوچکترین تردید این طور مطالب رو از هر کسی که میخواد باشه از بیخ قیچی کنن تا فرهنگ صحیح تبادل اطلاعات بدون حال گیری نهادینه بشه . در عرایض بالا نگاه خاصی به هیچکدام از افراد حاضر در بحث نداشتم و عرایضم مربوط میشه به همه زمانها و همه بحثها و هدف هم چیزی نبود جز بهبود جو سایت که امیدوارم خوانندگان بخوبی درک کنند که حتما" هم همینطور هست  :)


مجددا" تاکید میکنم هیچ خواهر یا برادری از حضار ( و غیر حضار ) هدف مشخص این نوشته نیست . به کرات توی بحثهای مختلف سایت با پدیدهء تیکه پرونی و حالگیری مواجه شدم و در اغلب موارد در اثر همین برخوردها فضای بحث به گند کشیده شده ( از بحث دلفی و سی بگیر تا مباحث مربوط به دلفی و وی بی و ... مباحث جدید تر ) . من هم به عنوان یکی از مدیران سایت نظرات شخصی خودم رو دارم و تمایل دارم ابرازشون کنم اما دوست ندارم در سایهء برخوردهای غیر تکنیکی هم اعصاب خودم خراب بشه هم وقتی که بابت نوشتن دو صفحه مطلب میزارم دود بشه . به طور جدی از برادران مدیر درخواست میکنم فارغ از نظرات شخصی و عقیده و گرایش ، هر جا "بحث" تکنیکی پیش اومد که بینش به هر ترتیبی مطلب غیر تکنیکی و بصورت "تیکه" یا برای حالگیری مطرح شد ، بلافاصله قیچی کنن ( ر-ک دردسرهای اولیه بخش امنیت و وضعیت فعلی اش  :)  ) و مطمئن باشن "رفتار صحیح" بعد از مدتی خود به خود نهادینه میشه  :) 
اگر رفقائی که در مورد دات نت و تکنولوژی های مربوطه سوال پرسیدند هنوز هم نقاط ابهامی تو ذهنشون وجود داره و رفقای پیش کسوت تر فکر میکنن امکانش هست بی سوادی مثل حقیر هم پنج دقیقه ای منبر بره کلهم اجمعین ندا بدن تا حقیر هم چند سطری در باب " ابزارهای توسعهء دات نت " حرف بزنم  :wink: 

همگی موفق باشید   :kiss: 

_مطالبی که نوشتم بیشتر ناظر بر بحثهای دیگه بود اما نگاه کردم و دیدم اینجا هم مثل سایر "بحث" های سایت دچار همین آفت شده . یکی به دیگری میگه تو هدفت ضایع کردن بوده اون یکی میگه فحش نده یکی دیگه میگه اصلا جفتتون بی سوادید یکی دیگه ... یکی دیگه ... ؟؟؟ چند تا مطلب "نا مربوط" الان توی این تاپیک هست ؟ اصلا" چرا باید باشه ؟  :? _

----------


## مهدی کرامتی

> به طور جدی از برادران مدیر درخواست میکنم فارغ از نظرات شخصی و عقیده و گرایش ، هر جا "بحث" تکنیکی پیش اومد که بینش به هر ترتیبی مطلب غیر تکنیکی و بصورت "تیکه" یا برای حالگیری مطرح شد ، بلافاصله قیچی کنن


موافقم. برادران مدیر، یا علی.




> اگر رفقائی که در مورد دات نت و تکنولوژی های مربوطه سوال پرسیدند هنوز هم نقاط ابهامی تو ذهنشون وجود داره و رفقای پیش کسوت تر فکر میکنن امکانش هست حقیر هم پنج دقیقه ای منبر بره کلهم اجمعین ندا بدن تا حقیر هم چند سطری در باب " ابزارهای توسعهء دات نت " حرف بزنم


بسم‌ا...
سراپا گوشیم...

----------


## Abbas Arizi

> اگر رفقائی که در مورد دات نت و تکنولوژی های مربوطه سوال پرسیدند هنوز هم نقاط ابهامی تو ذهنشون وجود داره و رفقای پیش کسوت تر فکر میکنن امکانش هست حقیر هم پنج دقیقه ای منبر بره کلهم اجمعین ندا بدن تا حقیر هم چند سطری در باب " ابزارهای توسعهء دات نت " حرف بزنم


ما هم سراپا گوشیم. لطفا _تمام جنبه‌ها_ رو بررسی کنید.

----------


## Anti_Evil

Inpy جان ما همیشه منتظر شنیدن نقطه نظرهای شما هستیم (:

----------


## khadangi

> اگر رفقائی که در مورد دات نت و تکنولوژی های مربوطه سوال پرسیدند هنوز هم نقاط ابهامی تو ذهنشون وجود داره و رفقای پیش کسوت تر فکر میکنن امکانش هست بی سوادی مثل حقیر هم پنج دقیقه ای منبر بره کلهم اجمعین ندا بدن تا حقیر هم چند سطری در باب " ابزارهای توسعهء دات نت " حرف بزنم
> همگی موفق باشید


تو ذهن من نقاط ابهام زیادی باقی مونده امیدوارم نظر شما دوست عزیز رو هم بشنوم.
راستی باید بگم من همون ehsaanjoon هستم که به عللی(ضایع بودن id) با اجازه مدیر سایت idم رو عوض کردم.
در مورد حال گیری هم کاملا با نظر شما موافقم.یکی مثل من هیچی از کامپیوتر نمیدونه و یکی مثل شما خدای برنامه نویسیه.
ولی این دلیل نمی شه که کسی دیگری رو تحقیر کنه.
هر چی سواد انسان بالاتر میره باید خضوعش هم بیشتر بشه.
فکر می کنم اومدیم اینجا که در جوی دوستانه از هم چیزهایی یاد بگیریم(از اخلاق گرفته تا کامپیوتر)
یا علی :flower:  :kiss:

----------


## khadangi

از اساتید و دوستان عزیزی هم که وقت گرانبهاشون رو برای جواب دادن به دوستانشون میذارن تشکر میکنم. :flower:  :flower:

----------


## SSP_Software_team

خوب برادر Anti Evil
یه سوال چرا VB به یک باره بازنویسی شد و برای تبدیل اون به دات نت فقط مایکروسافت یه ویزارد در اختیار کاربران قرار داد که البته جوابگو هم بود؟

چرا برنامه های که در ++VJ نوشته شده بود باز هم فقط با یه ویزارد به راه حل های #VJ تبدیل شد؟
خانوم مونا گفتن بسیاری از شرکت ها برنامه هاشون رو با VC و MFC تهیه کردن و کایکروسافت نمیتونه حمایتشو از MFC قطع کنه ولی من فکر میکنم احتمالا بلایی که به سر VB و ++VJ اومد به سر MFC هم خواهد آمد البته من این طور فکر میکنم.
در ضمن فکر میکنم یکی از اون حرفهای نامربوط رو من زدم که امیدوارم منو ببخشین دیگه هم تکرار نمیشه از قدیم گفتن حرف حساب جواب نداره :)

----------


## Inprise

سلام ؛

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

مطلب اول رو به این قسمتها تقسیم میکنم :

- دات نت دقیقا" چیه
- نقش دات نت در توسعهء نرم افزار
- دات نت و سایر فناوری ها
- ابزارهای مایکروسافت برای توسعهء دات نت
- سایر ابزارها

*-- دات نت دقیقا چیه ؟*

تعریف اغراق آمیز و با مزهء MSDN در مورد دات نت میگه :


<span dir=ltr>

The .NET Framework is an integral Windows component that supports building and running the next generation of applications and XML Web services. The .NET Framework is designed to fulfill the following objectives: 

To provide a consistent object-oriented programming environment whether object code is stored and executed locally, executed locally but Internet-distributed, or executed remotely. 
To provide a code-execution environment that minimizes software deployment and versioning conflicts. 
To provide a code-execution environment that promotes safe execution of code, including code created by an unknown or semi-trusted third party. 
To provide a code-execution environment that eliminates the performance problems of scripted or interpreted environments. 
To make the developer experience consistent across widely varying types of applications, such as Windows-based applications and Web-based applications. 
To build all communication on industry standards to ensure that code based on the .NET Framework can integrate with any other code.

</span>

_پس جالبه بدونید مایکروسافت ، دات نت رو به عنوان یک عنصر " مبتنی بر ویندوز" و " ویندوز محور" معرفی میکنه و این یعنی صراحتا" مایکروسافت وجود دات نت رو جائی در جائی به غیر از ویندوز به رسمیت نمیشناسه ( و طبیعیه که من و تو و امثال ما اهمیت چندانی نمیدیم که مایکروسافت دقیقا چه چیزهائی رو به رسمیت میشناسه یا نمیشناسه ، چون بیزینس ما و مایکروسافت نقاط مشترک چندانی نداره و دقیقا" به همین دلیل موجوداتی مثل Mono  متولد شدن  :)  )_ 

دات نت یک بستر و پایه است برای تولید نرم افزارهای کاربردی سطح بالا ، برنامه های مبتنی بر شبکه و اینترنت و سرویسهائی که به موارد مذکور مربوط هستند . دات نت دقیقا تشکیل شده از مجموعهء وسیعی از Wrapper که Win32 API رو محصور میکنند ، یک کتابخانهء کلاس نسبتا" کامل برای تولید نرم افزار ، مترجم کد به باینری ، و یک استاندارد برای تولید مترجم .

سوال بی موقع : خوب اینطوری که من میبینم اینجا چیز جدید وجود نداره ، درسته ؟ تک تک اجزاء قبلا" در تکنولوژی های مختلف وجود داشتن و کل این مجموعه هم سالهاست که تحت عنوان جاوا داره کار میکنه ، من درست فکر میکنم یا نفهمم و دات نت کارهائی که تصور میکنن مایکروسافت کار عجیب و بزرگی انجام داده درست میگن ؟

جواب : تو کاملا" درست فکر میکنی  :)  اینجا هیچ چیز جدیدی وجود نداره . حتی در همین روند تقلیدی الا یک مورد خاص ، هیچ خلاقیتی وجود نداره ( دلائل رو کمی پائین تر خواهید دید ) . اما باید به این نکته توجه بشه که ما همیشه به چیزهای جدید نیاز نداریم  :)  ما اکثرا" به یه ابزار خوب و پاسخگو برای انجام وظایفمون نیاز داریم و دات نت یه ابزار خوب و پاسخگوست که میشه باهاش وظایف عمومی برنامه نویسی رو انجام داد .

من به شخصه معتقدم مایکروسافت قبل از دات نت حداقل در حوزهء تولید نرم افزار حرف خاصی برای گفتن نداشت  :)  ویژوال استودیو تشکیل شده بود از این عناصر : ویژوال بیسیک - ویژال سی - ویژوال فاکس پرو - ویژوال اینتر دو - ویژوال دی بیس . اصلا" نمیخام وقتم رو تلف کنم و در مورد مسخرگی ویژوال فاکس و ویژوال بیسیک حرف بزنم . ویژوال اینتر دو برای توسعهء مبتنی بر وب ابزار خوبی بود اما اصولا" فرق چندانی با ابزارهای مشابه نداشت . تنها عنصر موفق مخلوق مایکروسافت ویژوال سی بود به این دلائل :

کامپایلر قدرتمند
MFC
ATL

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

یادمه اولین توصیفی که در مورد دات نت توی یه چت خوندم این بود :  i like it 'cuz it is quick !  :)  دات نت یه محیط واقعی  RAD است (  Rapid application Development ) . اهمیت RAD در صنعت نرم افزار فوق العاده بالاست . ( یادمه سر این مورد بحث نسبتا" مفصلی با کامبیز داشتیم ) اهمیت RAD حتی از توانائی کامپایلر یا سیستم عاملهای حمایت شده و ... بیشتره . صنعت نرم افزار دارای بی شمار مشتری است که هر روز و هر روز نیاز به نرم افزار مختلف و کوچک و خاص منظوری دارن که در یک فرصت کوتاه ایجاد بشن و یک کار خاص رو انجام بدن و بعد فوت کنن  :)  شاید چنین مفهومی در ایران خیلی ملموس نباشه اما دنیای پیشروی  امروز به نرم افزار نگاهی مثل ساختمون ، میز ، صندلی ، کارمند  و ... داره . یه چیز جدی که باید در یک لحظهء خاص و برای هدفی خاص در دسترس باشه و کاملا" فرمان پذیر . RAD به تحقق این نیاز کمک زیادی میکنه . همین حالا مدیر شرکت تصمیم گرفته از تعداد زیادی سند الکترونیکی موجود یک گزارش خاص منظور بگیره و دادهء خاصی رو ازشون استخراج کنه و به ترتیب خاصی مرتب کنه .  دپارتمان نرم افزار سازمان باید بتونه بالافاصله یه نرم افزار کوچولو و جمع و جور رو تحویل مدیر بده . جستجوی تعداد زیادی سند و اجاد یک بانک اطلاعاتی ازشون و جستجو در اون بانک و مرتیب کردن داده ای خاص در یک محیطی مثل ویژوال سی درست مثل یک کابوس میمونه !  :roll:  در حالیکه محیط  RAD ای مثل دلفی با یک برنامه نویس متوسط میتونه در کمتر از دو ساعت این برنامه رو تحویل بده  :)  نقش RAD متاسفانه در بحثهای اینچنین خیلی کم مورد توجه قرار میگیره .

حالا مایکروسافت یک محیط RAD داره که توی این محیط ضمن اینکه میشه جزئیات سیستم رو تحت کنترل درآورد ، میشه وظایف عمومی رو به سرعت انجام داد ، از توسعه برای ویندوز گرفته تا توسعه برای وب  :)  دات نت بر فراز غولهائی مثل VCL ،  QT و JDK متولد شد ، از تجربیات مفید اونها استفاده کرد و تمام تلاشش رو کرد برای کسانیکه به هر دلیلی از مایکروسافت و ابزارهاش پیروی میکنن توانائی بیشتر در کنار تلاش و زحمت کمتر رو ایجاد کنه . پس دات نت "جدید" نیست ، "خلاقانه" هم نیست ، امکان و ویژگی محیر العقولی هم نداره . دات نت صرفا" یه ابزار خوبه ، در کنار سایر ابزارهای خوب  :)  و جلوتر از ابزارهای بد ، که خیلی شون ، سری قبلی محصولات مایکروسافت هستند  :wink: 

*-- نقش دات نت در توسعهء نرم افزار*

بلا شک دات نت موفقیت قابل توجهی کسب کرده و هر کسی هم محبوبیت دات نت رو انکار کنه نابینائی خودش رو به اثبات رسونده . اما من تصور میکنم محصولات مایکروسافت به دلیل اینکه خوب هستند موفق نمیشن ( اینجا من از عبارت موفقیت به معنای کسب مزیت اقتصادی قابل توجه استفاده کردم  :) ) بلکه کاریزمای خاص مایکروسافت که بخشیش محصول "ویندوز" و بخشی دیگر محصول توانائی قابل توجه اقتصادی- تبلیغاتی است میدونم . این اعتقاد باعث نمیشه من فکر کنم دات نت موجود بیخودی است ، خیر .




> دات نت صرفا" یه ابزار خوبه ، در کنار سایر ابزارهای خوب  :)  و جلوتر از ابزارهای بد ، که خیلی شون ، سری قبلی محصولات مایکروسافت هستند


اما همین اعتقاده که باعث میشه فکر نکنم که عده ای موجود بی نهایت باهوش و مدبر در مرکز فرماندهی مایکروسافت نشسته اند و طی یک استراتژی بلند مدت و مبتنی بر برنامه دارن اهداف بلند مدت مایکروسافت رو محقق میکنند .  :) حرکت جاهلانهء مایکروسافت در طراحی ساختار "دات نت فریم ورک" باعث میشه شما هر از چند گاهی با یه نسخهء جدید دات نت مواجه بشید ، به عنوان کاربر ، و با یه نسخهء جدید SDK ، به عنوان توسعه گر . هر از چند گاهی با یه کادر مکالمه ای حاوی یه پیام خطا مواجه بشید ، به این مضمون که برنامهء مورد تقاضای شما با نسخهء فریمورک نصب شده سازگار نیست ، به عنوان کاربر ، و با کامپوننتهائی مواجه بشید که هر کدام برای نسخهء خاصی از فریمورک نوشته شده اند ، به عنوان توسعه گر و قس علی هذا . من حتی تصور نمیکنم سناریوی بلند مدت و مدونی برای رسیده به "آنجائیکه دات نت قرار است به سمت آن برود" وجود داشته باشه . اینجا بحث رفع باگ یا افزودن قابلیت نیست ، که این رفتار صحیح و پسندیده ایه اگر منطقی اتفاق بیفته ، ( رجوع کنید به  JDK ) بلکه اینجا اصولا" اینفرااستراکچر فریمورک تغییر میکنه . این بستر در حال تغییر به شدن به ویندوز وابسته است ، ویندوز هم در حال تحوله ، که محصول این تغییرات چیزی نخواهد شد به غیر از یک محیط ناسازگار که ضمن وابستگی غیر قابل توصیف به ویندوز ( این یکی از اهداف استراتژیک مایکروسافته ) توسعه گران رو به ارتقاء دائمی نرم افزارها ، ویندوز ، سخت افزار و ... هدایت میکنه که نتیجه اش چیز جز سرایز شدن میلیونها دلار به جیب "حضرات" نیست . لازمه توضیح بدم که دقیقا" همین سیاست زیرکانه مایکروسافت رو به چنین غولی مبدل کرده . وقتی ویندوز 3.1 توزیع شد من با یونیکس SVR4 رو دیده بودم و بخوبی با موجودی بنام X آشنا بودم . قبل از اون اپل هم موفقیت بزرگی کسب کرده بود و ...

دات نت بلاشک نقش مؤثری در توسعهء نرم افزار خواهد داشت چون هم ابزار خوبی است ، هم محصول بزرگترین غول نرم افزاری دنیاست ، هم با ویندوز ارتباط خوبی داره ، هم سهل الاستفاده است .  :) 

*-- دات نت و سایر فناوری ها*




> دات نت بر فراز غولهائی مثل VCL ،  QT و JDK متولد شد ، از تجربیات مفید اونها استفاده کرد و تمام تلاشش رو کرد برای کسانیکه به هر دلیلی از مایکروسافت و ابزارهاش پیروی میکنن توانائی بیشتر در کنار تلاش و زحمت کمتر رو ایجاد کنه


CLR از دنیای جاوا و FrameWork از دنیای VCL و  QT آموزه های زیادی دارن . آندره هلسبرگ که اولین نگارش توربو پاسکال رو نوشت و مدتها در راس هرم توسعهء VCL بود گرفته تا خرید محصولات آزمایشگاههای تحقیقاتی بورلند توسط مایکروسافت تا توسعه بی حد و حصر جاوا و مشاهدهء عوامل موفقیتش و ... همگی نقشهای مهمی در سناریوی موفقیت دات نت ایفا میکنن  :) و البته نباید خود تیم توسعهء نرم افزار مایکروسافت رو با این دیدگاه که "تولید کنندهء ویندوز" هم هستند ، در این موفقیت نا دیده گرفت . و در کنار همهء این اما ها نباید این امای آخر رو نادید گرفت (!) : اما با همهء این حرفها توسعه گران به همهء بخشهای هدیه ای که مایکروسافت به اونها داده نیاز ندارن در حالیکه باید برای استفاده از بخش کوچکیش هزینه های مادی و غیر مادی همهء اون رو بپردازن . توسعه گران لینوکس از QT براحتی در محیط لینوکس استفاده میکنن و بی شمار برنامهء کاربردی با اون نوشتن که با کمترین هزینه ( و حتی خیلی اوقات مجانی ) اون رو تولید کردن . برنامه نویسان دلفی یا سی بیلدر سالهاست دارن از VCL استفاده میکنن ( که دات نت کارها تازه دارن طعمش رو میچشن ) و ... اما توسعه گرانی که سرنوشت فعالیتهای خودشون رو به نقشه های مایکروسافت پیوند زدند باید دات نت رو با ران تایم حجیم و سرعت بسیار کند و توزیع دشوار و قیمت فوق العاده بالا و پیوستگی جدی با ویندوز تحمل کنند  :)  در واقع دات نتی که به "خوب" بودنش ایمان دارم ، فضای نه چندان جدید ی برای توسعه گرانش ایجاد کرده که اونها ضمن رسیدن به "هیچ امکان جدید"ی باید هزینهء بیشتری نسبت به راه حلهای قبلی بپردازن . این دقیقا" همون مساله ایه که من بارها سعی کردم توجه توسعه گران دات نت رو بهش جلب کنم اما اغلب عینک آفتابی تعصب ( یا عدم وجود دانش در مورد سایر محیطها ) باعث میشه این حقیقت چندان که باید مورد توجه قرار نگیره .  :) 

*-- ابزارهای مایکروسافت برای توسعهء دات نت*

بصورت پیشفرضبسته های VB .NET و  #C و  Managed C و #J توسط مایکروسافت توزیع میشن . اگر هدف " توسعهء مبتنی بر دات نت" باشه هیچکدام از این محیطها با هم متفاوت نیستند . همگی نه تنها به Intermediate Language ترجمه میشن ، حتی برای ساختار زبان هم از یک Design Pattern استفاده میکنن . "همهء" این زبانها محصولاتی جدید هستند ، هر چند که اگر توسعه گری تجربه و آشنائی با دلفی یا جاوا داشته باشه محیط سی شارپ و اگر تجربهء جاوا داشته باشه محیط جی شارپ رو آشنا خواهد دید .  :) مبدلهای مختلفی هم برای تبدیل کدهای نوشته شده به یک زبان دیگر وجود داره ، چه IL رو داشته باشید چه سورس کد و در هر لحظه که بخواهید میتونید زبان برنامه رو بطور کل تغییر بدید .

 اگر هدف توسعهء دات نت در کنار سایر تکنولوژی ها باشه باید سی شارپ و  VB .NET رو فراموش کرد .  Managed C میتونه بصورت همزمان از کدهای مدیریت نشده و دات نت استفاده کنه . این واقعا" مهمه  :)  میلیونها میلیون خط کد نوشته شده برای مقاصد مختلف وجود داره که "همین حالا" تبدیل کردن اونها به "کدهای مدیریت شده" غیر ممکنه ، دات نت هم که فقط مبتنی بر ویندوزه ، پس چه خوبه بشه از این کدهای مدیریت نشده در کنار قدرت کتابخانهء کلاس دات نت استفاده کرد . اینجا  Managed C خودش رو نشون میده و مطمئنا" یکی از ابزارهای مهم محیط توسعهء دات نت است چرا که همین حالا برنامه نویسان C ( و نه سی شارپ تازه متولد شده ) از سایر توسعه گران بیشتر هستند و منطقا" یک برنامه نویس C در محیطهای جدید هم اول به دنبال دوست خودش میگرده . من "برنامه نویس" نیستم و دانش نسبتا" خوبی در مورد Managed C و #C دارم اما "اول" از همه در محیط دات نت به سراغ  Managed C رفتم و به دلائل شخصی بیشتر از بقیه بهش اهمیت میدم  :) #J هم میتونه کمک کنه یک برنامهء ویندوز یا وب را با ترکیبی از کدهای مدیریت شدهء مبتنی بر ویندوز و  JDK جاوا تولید کنید . یعنی همانطور که Managed C امکان ترکیب دات نت و کدهای معمولی C رو میده ، جی شارپ امکان ترکیب دات نت و  JDK رو میده . البته فقط تا  JDK 1.3 نه بیشتر  :(  

نهایتا" اگر هدف توسعه نرم افزار نا مربوط به دات نت باشه باز هم  Managed C امکانات زیادی در اختیارتون میزاره . میتونید کماکان از MFC استفاده کنید و برای توسعه کاربردهای مبتنی بر COM همچنان ATL وجود داره و هر دو با نسخه های جدید و بهینه تر رو صحنه ظاهر شدن ، برای توسعهء سرویسهای وب ( نا مربوط به دات نت ) اینجا ATL Server و افزونه های  Managed Extentions برای  Managed C وجود داره . اگر هدف تولید کاربردهای مبتنی بر وب باشه باز هم  ISAPI و  ATL Server ها موجود هستند . ( بخش قابل توجهی از سایت خود مایکروسافت خصوصا" بخش دات نت پاسپورت با Managed C نوشته شده ، بصورت ATL Server . احتمالا" موقع ثبت نام برا یک پاسپورت دات نت دیده اید که فایلهائی با فرمت srf. نوع صفحات رو تشکیل میدن . به این فایلها اصطلاحا" استنسیل گفته میشه . این استنسیلها روی ATL Server ها قرار میگیرن و در واقع PlaceHolder ای برای تگهای HTML هستند . ( دلیل اینکه چرا وقتی پای امنیت فوق العاده بالا به میون میاد حتی پای خود مایکروسافت هم روی دات نت میلرزه و ... مفصله که اگر کسی علاقه داشت بعدا" در موردش حرف میزنیم  :) )

نتیجتا" شما هر هدفی در حوزهء "ویندوز - وب" داشته باشید چه بصورت مدیریت شده چه مدیریت نشده ، همگی توسط ابزارهای مایکروسافت قابل پاسخگوئی هستند . پس نتیجه میگیریم مایکروسافت هیچ نوع کاربردی رو - بجز ویژوال بیسیک 6 - منسوخ نکرده و خودش هم تلویحا" یا تصریحا" پا فشاری خاصی روی هیچکدام نداره ، خودش هم از ترکیبی از همهء اینها برای توسعهء محیطهای شخصی اش استفاده میکنه  :)  ( همین حالا اگر زمان اجراهای خاص #J نباشه ، محیط دات نت 2003 اجرا نمیشه ! منظورم DevEnv هست ها ! )

آنچه که گذشت :

- دات نت دقیقا" چیه
- نقش دات نت در توسعهء نرم افزار
- دات نت و سایر فناوری ها
- ابزارهای مایکروسافت برای توسعهء دات نت

و بخش آخر این مبحث :

*--  سایر ابزارها*

طبیعی است که انتخاب دات نت از طرف مایکروسافت به عنوان بستری برای آیندهء توسعه نرم افزار تمام تولید کنندگان ابزارهای برنامه نویسی تحت ویندوز رو ترغیب به تولید ابزارهائی مبتنی بر بستر دات نت کنه  :)  خوب تا دیروز هم همهء این محیطها روی Win32 API کار میکردند که اون هم محصول مایکروسافت بود و هست . به علت کثرت محیطهای مبتنی بر دات نت و مباحث مطرح شده در این تاپیک من فقط در مورد محصولات Inprise (  :wink:  ) صحبت میکنم . بورلند هم به عادت مالوف دو محصول جدید مبتنی بر دات نت یعنی C Sharp builder و  Delphi 8 for .NET رو توسعه داده و توزیع کرده . وضعیت این دو محصول دقیقا" چیه؟ و با وجود محیطهای مایکروسافتی توجیه لزوم وجود / کاربرد این محصولات منطقی است ؟ برای جواب دادن به این سوال باید اول از همه ببنیم این محیطها دقیقا" چی هستند ، موافقید ؟

سوال : دلفی 8 برای دات نت دقیقا" چیه ؟ چه ویژگیها و توانائی هائی داره ؟

جواب :

( به دقت مطالعه کنید ، اهمیت داره )

<span dir=ltr>

Delphi™ language RAD development for the Microsoft® .NET Framework, including
VCL Forms, Windows® Forms, ASP.NET, Web Forms, Web Services, ADO.NET, and
more

Type-safe, hardware-independent, and fully object-oriented 
PE Verifiable CIL code generation 
Imports symbols directly from .NET assemblies; no header file translations or external
declarations needed

Unicode® strings 
Class variables/class static data 
Operator overloading 
Interoperability support through COM+ 1.0 and .NET Framework services with typelibrary-
based access

Program more simply, safely, and productively with garbage collection, structured
exception handling, and type safety

Records with methods (value types) 
Support for unsafe mode, for using pointers to manipulate memory that is not under
the control of the Garbage Collector

Nested types 
Custom attributes to mark types with information that can be recovered at runtime 
Compatibile with existing Delphi source code 
Supports pointer operations such as PChar in special unsafe code blocks 
Unmanaged C style library DLL export option for use with non .NET code without
COM interop! –Statically link or getproc with Delphi 7 or prior!
Commercial development license for professional software sales

Foundation Class Library (FCL) – More than *4500* classes that encapsulate rich
functionality such as XML, data access, file upload, regular expressions, image
generation, performance monitoring and logging, transactions, message queuing,
SMTP mail, and much more!

Common Language Runtime (CLR) – Improve application reliability, security,
deployment, and performance, and run applications on high-volume, low-cost
hardware

XML SOAP Web Services – Built on XML and incorporates the latest Web Services
standards to facilitate cross-platform integration

.NET Framework remoting – simplifies working with distributed .NET objects

Unified programming model – Leverage the same skills and technologies for both
Web and desktop Windows®-based applications, including XML Web Services as well
as Web and smart-client applications for devices, PCs, and servers

Common Language Infrastructure (CLI) – Applications written in different
programming languages integrate deeply with each other, allowing current
development skills to carry forward without retraining

Designer Integration – .NET Framework features were designed specifically to
improve the quality of the tools that use them, such as integrated debugging and
profiling. Delphi is built to take advantage of the .NET Framework

Component Based Design – Write less code with the .NET Framework, which uses a
highly componentized, plumbing-free design that enables developers to focus on
writing business logic

Direct CLR class access; no need to translate header files

Employ Windows® Application Services with Windows Server™ 2003 and Windows®
2000 Server. For example, .NET Framework-based transactions are COM+
transactions, and all the new COM+ capabilities in Windows Server 2003 can be used
from the .NET Framework

XCOPY deployment – With .NET Framework metadata technology, installing
applications is as easy as copying them into a directory

Side-by-side execution for strong-binding to help eliminate potential versioning
conflicts

No-Touch Deployment – Smart-client applications can be deployed to client desktops
through remote Web servers in the same manner as Web applications

Managed Code Execution – With memory, threads, and processes managed by the
.NET Framework, memory leaks, overwrites, and buffer overflows are eliminated

Role-based security – provides a unified model for authorization and authentication of
principals based on identity and roles

ASP.NET Web Security supports HTTP authentication for Basic, Digest, NTLM,
Kerberos, and SSL/TLS client certificates as well as Microsoft® Passport
authentication and Forms-based (Cookie) authentication

Evidence-based security applies and enforces different levels of trust to all running
code

VCL for the .NET Framework – managed Visual components for rapid application
development

Standard, Data Controls, Dialogs, Internet Direct (Indy), Additional, Win32,® System,
Win 3.1, Data Access, and BDE component categories

Borland® dbExpress, and Borland® DataSnap™ (client) component categories

VCL Visual Form Inheritance and Form linking to reduce coding and simplify
maintenance

Object-oriented, fully extensible and reusable component and application architecture
in VCL for the Microsoft .NET Framework

Object Repository for storing and reusing forms, Data Modules, and experts

TDateTime extensions accelerate your date and time calculations

SubComponent classes combine commonly mixed components for greater utility and
speed the creation of user interfaces

Visual Component creation

Support for Advanced Custom Draw functions for increased control over the Windows
API

Designed for seamless integration of the Unified Modeling Language™ (UML™)
modeling environment, development, and runtime phases with Enterprise Core
Objects (ECO™) for the Microsoft .NET Framework

With the Borland® LiveSource™ model designer, visually create and edit your UML
class diagrams, powered by Borland® Together® technology

Integrated XMI support is engineered to provide seamless import of UML models to
ECO from popular third-party modeling tools such as Borland Together and other
XMI-compliant tools

Delphi code visualization powered by Borland Together technology provides a live
UML Model View of your Delphi code

Instant model-powered .NET enterprise architecture and automatic object-level
capabilities

ECO object-relational persistence mapper for seamless model-powered mapping of
cached objects to SQL database and XML files

ECO Space Designer for configuring UML packages, verifying models, and
generating and evolving the database

Borland Optimizeit™ Profiler for the Microsoft .NET Framework – integrated memory,
CPU, and CLR profiling

High-level performance overview to understand, in real time, whether a performance
issue is related to CPU, memory, or both

Powerful yet easier-to-use WYSIWYG HTML/WebForms designer to enable rapidly
building rich ASP.NET Web applications

Develop ASP.NET User Controls using the Visual Designer

Automatically detect any changes, dynamically compile the files if needed, and store
the compiled results to reuse for subsequent requests

DataSnap (formerly MIDAS) client and ADO.NET connector

Borland® dbExpress data access architecture includes support for MSSQL 2000,
Oracle 9i, and SQL Anywhere® 9

InterBase® Express™ (IBX) applications, based on the custom data access Delphi
component architectures, provide access to advanced InterBase features and offer
the highest-performance component interface for InterBase

Two-way visual UML class designers for ECO applications

State-of-the-art IDE with a fully integrated Code Editor and debugger, view history,
easier-to-understand error messages, and color syntax highlighting

Syntax highlighting for Delphi, C#‎, C/C++‎, Visual Basic .NET, HTML, ASPX, and
XML, SQL, Javascript,™ and IDL

Modules/Runtime scope view provides a global runtime view of the namespaces and
classes available to your program, including a list of source files used to build your
programs and assemblie

Create ASP.NET XML Web Services and add XML Web Services running on other
machines easier
</span>

اون حتما" مطالعه کردید در وهلهء اول این حقیقت رو به ذهن متبادر میکنه که دلفی برای دات نت همانطور که دلفی 7 به طور کامل تولید و توسعه برای Win32 رو حمایت میکنه ، به همان خوبی ، تولید و توسعه برای دات نت رو حمایت میکنه و در وهلهء بعد این حقیقت رو پر رنگتر میکنه که برنامه نویسان ویژوال بیسیک باکدها شون خداحافظی میکنند و برنامه نویسان ویژوال سی یا باید مسیر MFC را ادامه دهند یا دوباره برای دات نت کدبنویسند و اینجا " فقط" ( تاکید میکنم "فقط" ) برنامه نویسان دلفی هستند که بخش قابل توجهی از برنامه هایشان بدون تغییر و بخشی دیگر با تغییرات خیلی کم براحتی روی دات نت هم ترجمه میشن و کار میکنن  :)  این "خیلی خیلی" اهمیت داره  :)  و در مرحلهء آخر نگاهی اجمالی به قابلیتهای دلفی برای دات نت مشخص میکنه که دارای توانائی هائی است که محیطهای مایکروسافتی ازش بی بهره هستند . خصوصا" Indy که برای تولید برنامه های شبکه ای بی نظیره و برنامه نویسان سی شارپ حتی خواب چنین تولید سریع و راحتی را نمیتوانند ببینند یا ECO که رسما" برنامه نویسی با دلفی را به "نقاشی" تبدیل کرده  :)  در مورد ECO قبلا" مطلب نوشتم توی بخش مقالات حتما" بخونیدش و ...

نتیجه : دلفی برای دات نت فقط " یه زبون مبتنی بر دات نته دیگه " نیست ، بلکه به جرات قدرتمندترین محیط برای توسعه مبتنی بر دات نته و البته تنها محیطی است که توسعه گران قدیمی ش هنوز هم میتونن از کدهاشون نگهداری کنن  :) 

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





> مزیت ها و برتری های بزرگ سی شارپ بیلدر باعث میشه افرادی که اهل تدقیق در امور هستند بهش مثبت نگاه کنند . 
> 
> 1. سیاست بورلند برای ایجاد پلی بین دات نت و J2EE ( معروف به Borland Bridge ) : یکی از اهداف بورلند در تولید ابزارهای تولید نرم افزار ایجاد قابلیتهای ارتباطی غیر انحصاری بین تکنولوژی ها و بسترهای متفاوت است .سی شارپ بیلدر با استفاده از نسخه اولیه تکنولوژی بورلند یعنی Janeva تنها ابزاری است که میتونه بین زمان اجراهای دات نت و جاوا و حتی روشهای اتصالی مثل CORBA تماس ترنسپرنت برقرار کنه ! 
> 
> 2. تولید و توسعه گسترده و بهینه : یکی از مشخصات سی شارپ بیلدر هماهنگی اش با ابزارهای قدرتمند بورلند برای مدیریت تولید تیمی - تولید مبتنی بر مدل - تولید مبتنی بر نیازهای و پذیرنده تغییرات حین پیاده سازی و ... . وجود یکدستی بین سی شارپ بیلدر و کالیبر آر ام و استار تیم و بورلند پراجکت پورتال و از همه مهمتر بورلند توگدر و اتصال رویه مدار همزمان ( ریل تایم پروسیجرال ) توگدر و سی شارپ بیدلر برای توسعه کد بدون نگارش متن نرم افزار همزمان با تغییرات مدل نرم افزار حین طراحی پروژه ! ( این مفاهیم رو فقط افرادی که به واقع در پروژه های سازمانی و بزرگ شرکت داشته اند و خصوصا معماران نرم افزار بخوبی درک میکنند . اگر نیت نوشتن هلو ورلد باشه بین کوئیک بیسیک و سی شارپ چه فرقی هست ؟ ) 
> 
> 3. ECO ( در موردش در بخش دلفی دات نت مطلب نوشته ام لزومی به تکرار نیست ) 
> 
> 4. زمان اجرای ECO : توسط این بستر میتونی در زمان اجرا مدل نرم افزار رو تغییر بدی ! مدل توسط بستر ECO در زمان اجرا به کد مناسب تبدیل میشه . این طلیعه توسعه هوشمند متن نرم افزاره و البته قرار نیست همه ، خصوصا" با توجه به جوان بودن سی شارپ بیلدر ، این رو درک کنند . 
> ...


نتیجتا" سی شارپ بیلدر با استفاده از بستر دات نت و زبان سی شارپ سعی میکنه محیط منطقی تر برای توسعه های متوسط و بزرگ نرم افزار ایجاد کنه .

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

سوال : تو به عنوان یک آدم نسبتا" بی سواد چه محیطی رو برای توسعه و برنامه نویسی دات نت توصیه میکنی ؟

جواب : بی سواد خودتی !   (:D) 

بدون مقدمه چینی : اگر برنامه نویس با سابقهء C هستید و تقریبا" با سایر محیطها بیگانه اید بهترین محیط برای شما Managed C خواهد بود . اگر برنامه نویس دلفی هستید ، چه چیزی بهتر از دلفی دات نت ؟ و اگر قرار است با دات نت شروع کنید ، سی شارپ میتونه پیشنهاد بهتری باشه چون آشنائی با ساختار زبانش میتونه مثلا" در یادگیری زبانهائی مثل جاوا و برنامه نویسی با دلفی هم بسیار زیاد مؤثر باشه و "من" محیط سی شارپ بیلدر رو توصیه میکنم . اگر هم بدون توجه به نوع زبان دنبال کسب امکانات خاصی که در محیط مایکروسافتی دات نت نهفته است هستید ، Managed C بهترین انتخاب است . در سایهء ترکیب دات نت و MFC و سورسهای فراوان و تولید ASP .NET با  ++C و تولید ATL Server ها گرفته تا COM Programming و ... . طبیعی است برنامه نویسان سابق وی بی ممکنه به VB .NET متمایل باشن که البته و صد البته نه تنها فوائد زیادی در سایهء مهاجرت به دات نت کسب میکنند ، میتونن بعد از تسلط نسبی به VB .NET سایر زبانها مانند سی شارپ را هم براحتی تجربه کنن  :) 
 شاید کمی بی ربط به نظر بیاد اما با عنایت به خبری که در بخش اخبار نوشتم ، کسایکه برنامهء مبتنی بر ویندوزی دارند که با استفاده از QT نوشته شده حالا میتونن ازش خروجی دات نت بگیرن یا با زبانهائی که دات نت را حمایت میکنه برای QT برنامه بنویسن ( QT مهمترین پلت فرم برنامه نویسی اهالیه لینوکسه و وجود چنین قابلیتی باعث هموار تر شدن مسیر حرکت لینوکس کارها به سمت برنامه نویسی دات نت میشه . از طرف دیگه محصولی بنام #QT در دست تهیه است که بر فراز مونو ، برنامه نویسی برای دات نت روی لینوکس رو سریعتر و راحت تر میکنه  :)  )

آنچه گفته شد :

- دات نت دقیقا" چیه
- نقش دات نت در توسعهء نرم افزار
- دات نت و سایر فناوری ها
- ابزارهای مایکروسافت برای توسعهء دات نت
- سایر ابزارها

&lt;اتمام بحث در مورد دات نت>

امیدوارم این مطالب تونسته باشه تا حدی روشن کننده بعضی مفاهیم مطرح شده در حوزهء دات نت باشه . یه مقداری از عرایض بنده هم میمونه برای بعد ، اگر حسش بود  :? 

موفق و خوش باشید  :)

----------


## Anti_Evil

آقای SSP، شما لطفا جواب آقای Inprise را مطالعه کنید.
---

خوب قبل از هر چیز از Inpy عزیز تشکر میکنم که مثل همیشه خیلی قشنگ و پر حوصله تقریبا به تمام مسائل مورد بحث دوستان جواب کامل دادند.
خیلی ممنون ای Inpy جان (: X:

یکی از مشکلاتی که من دارم اینه که واقعا نمیتونم این همه مطلب رو تو قالب جملات بگم ...
بعضی موقع ها که میشینم پای کامپیوتر و میخوام شروع کنم به یک پست کلی مطلب تو ذهنمه ولی وقتی شروع به نوشتن میکنم احساس میکنم حتی از ساختن یک جمله ساده هم ناتوانم ):

خلاصه همین که آدم بتونه این حجم اطلاعات رو انتقال بده خودش یه هنره، دوباره تشکر (:

تازه میتونم یه نفس راحت بکشم (:

خلاصه برای آدمای عصر حجری مثل من که حرف عادیشونم به زور میزنن این فوروم یه موهبت آسمانیه !

راستی Inpy جان، من واقعا فکر میکنم حضور و نظریات شما در مباحثی نظیر این واقعا الزامیه (:

با تشکر،
هادی

----------


## بابک زواری

این مقاله مشکلات موجود در برنامه نویسی تحت ویندوز را مورد بررسی قرار داده و راه حل هایی را که NET. برای رفع آنها ارائه کرده ، بیان می کند.
NET. تکنولوژی جدید مایکروسافت برای رفع مشکلات COM و برنامه نویسی تحت اینترنت است.
قبل از شروع کار با NET. تصور برنامه نویسان، نسخه ای جدید از زبانهای موجود مانند VB با VC++‎ است اما NET. یک محیط برنامه نویسی جدید است که می توان گفت شباهتهای زیادی با محیط های قبلی دارد. اگر چه برنامه های VB یا VC++‎ را می توان با تغییرات نسبتاً کم به محیط NET. انتقال داد، ولی اگر می خواهید از توانائیهای NET. بهره مند شوید، چیزهای زیادی برای یادگیری و تغییرات زیادی در برنامه ها دارید (خصوصاً برنامه نویسان VB).

مشکل عدم هماهنگی در نسخه های ویندوز:
هر برنامه نویسی که چند سال در محیط ویندوز برنامه نویسی کرده از تغییرات سریع و زیاد آن گله منداست.
- خود محیط ویندوز در نسخه های 16 ، 32 و 64 بیتی وجود دارد و نوشتن برنامه ای که در همه نسخه ها کارکند مستلزم در نظر گرفتن نکات زیادی است.
- مدلهای مختلفی برای نوشتن برنامه های گرافیکی ارائه شده مانند GDI ، DirectX و Open GL .
- مدلهای مختلفی برای کار با بانکهای اطلاعاتی وجود دارد مثل DAO ، RDOوADO
برنامه نویسان برای استفاده از توانائیهای مدلهای جدید احتیاج به اعمال تغییرات زیادی در برنامه ها دارند.
- Security در محیط های NT ،2000 با 95،98 متفاوت است . COM نیز مدل خود را دارا است. توجه نداشتن به این مسئله از زمان طراحی بخصوص در ایران زیاد دیده می شود.

راه حل در .NET :
.NET یک مدل شی گرا (Object Oriented) شامل صدها کلاس ارائه داده که عدم هماهنگی در محیط‌های ویندوز را از دید برنامه نویس مخفی می کند. براساس نسخه های مختلف ویندوز یک کلاس ممکن است برای توابع گرافیکی از GDI ،DirectX و یا Open GL استفاده کند و برنامه نویس نیاز به نگرانی در مورد این عدم هماهنگی ندارد.
Security در داخل محیط NET. قرار داده شده و برنامه نویس یا حتی مسئول نصب و نگهداری برنامه می‌تواند اجازه دسترسی به منابع مانند فایلها یا registry را از داخل محیط برنامه و یا خارج آن به یک کاربر داده یاسلب کند (مسئول نصب یا Administrator این‌کاررا از طریق فایلهای Config انجام‌می دهد).

مشکلات COM :
مایکروسافت COM را برای نوشتن برنامه هایی که روی Server ها اجرا می شوند ارائه داد ولی از نظر تکنیکی نوشتن یک برنامه بزرگ با مدل COM مشکل است و احتیاج به طراحی قوی و تیم برنامه‌نویسی با دانش بالا دارد.
- COM وراثت (Inheritance) را به طور مستقیم حمایت نمی کند و این مسئله استفاده مجدد از کدهای نوشته شده را مشکل می کند.
- COM که به شکل .Ocx, .dll و یا فرم های دیگر وجود دارد احتیاج به ثبت در Registry دارد که از نظر مشکل زا بودن معروف است.
- مسئله دیگر مشکل Version است. در یک زمان نمی توان بیشتر از یک نسخه از COM با یک GUID را برروی یک کامپیوتر داشت.(GUID یک شناسه 128 بیتی منحصر به فرد برای یک COM است). 
- نصب COM نیز مشکل دیگری است باید COM را در شاخة خاصی کپی کرده و سپس آنرا Register کرد و امیدوار بود که مشکل عدم هماهنگی با نرم افزارهای نصب شده روی کامپیوتر پیش نمی آید. در چنین حالتی شخصاً با Uninstall کردن بعضی از برنامه ها روی کامپیوتر شروع می کنم و گاهی پروسه ممکن است به نصب مجدد ویندوز ختم شود!
- مشکل Memory Leaking (نشتی حافظه) در COM .
در موقع اجرا در COM object یک شمارنده (Counter) ، تعداد ارجاعات به آن را نگه می دارد و موقعی که این تعداد صفر شود حافظه اختصاص یافته آزاد می شود. فرض کنید برنامه به شیء A اشاره می‌کند (Pointer دارد) و شیء A به شیء B و همچنین شیء B به شیء A . حال اگر برنامه شی ء A را رها کند شمارندة‌ شیء A به یک کاهش پیدا می کند (ونه صفر) و دو COM object تا زمان اتمام برنامه در حافظه باقی می مانند این مشکل در برنامه هایی که روی سرورها برای مدتهای طولانی اجرا می‌شوند، مقدار زیادی از حافظه را تلف می کند.

راه حل در NET. :
می توان به NET. به عنوان نسل جدید COM نگاه کرد اما در نحوه عمل آنها کاملاً متفاوت هستند.
(لازم به ذکر است که مایکروسافت استفاده از COM را در محیط NET. پشتیبانی می کند هر چند که مشکلاتی هم در این زمینه وجود دارد)
در NET. به جای Component ،‌اسمبلی داریم . هر اسمبلی می تواند علاوه بر کد فایلهای دیگری نظیر .html ،.gif و یا حتی یک .dll دیگر را در خود جا دهد . اسمبلی با پسوند .exe یا .dll وجود دارد.
هر اسمبلی مانند COM یک Version دارد ولی در Registry ثبت نمی شود. مایکروسافت تاحدی به روش قدیمی خود یعنی ini فایلها برگشته اما این بار از فایلهایXML برای ذخیره اطلاعات استفاده کرده این فایلها می توانند اطلاعات را بصورت ساختار یافته ذخیره کنند. مسیر و تنظیمات تمام اسمبلی‌های یک برنامه در یک Config فایل که در شاخه اصلی برنامه و در کنار فایل اجرایی اصلی برنامه قرار دارد ذخیره می شود. بنابراین شما می توانید یک برنامه و تمام اسمبلی های آنرا در یک شاخه و زیرشاخه های آن داشته باشید و نسخه دیگر برنامه به همراه اسمبلی های آنرا در شاخه دیگر. تنهاکاری که باید بکنید آن است که مسیر اسمبلی ها را در Config فایلها تعیین کنید و هر دو برنامه بدون هیچ تداخلی اجرا می شوند !
سوالی که ممکن است به ذهن برسد این است که با استفاده از Registry منبع مشترکی از Componentها داریم و نیازی نیست که یک نسخه COM را به صورت تکراری داشت.
NET. این مسئله را با مفهوم Shared Assembly حل کرده.
مسئله نصب نیز در محیط NET. بسیار ساده شده همه عملیات نصب با یک Xcopy انجام می شود.
فایل Config اطلاعات دیگری نظیر نحوه نمایش خطاهای برنامه و یا تنظیمات Security را نیز در خود دارد.
.NET مشکل Memory Leaking را با عوض کردن نحوه مدیریت object ها حل کرده. دیگر خود یک شیء اطلاعاتی را که برای زندگی ویااز بین رفتنش احتیاج است، ذخیره نمی کند. تمام اشاره گرها تحت کنترل محیط اجرایی .Net وتوسط Garbage Collector آزاد می شوند. این کار در زمان پر شدن heap (حافظه اختصاص یافته به object ها) ونبود حافظه لازم برای object های جدید انجام می شود.
مشکل استفاده از چند زبان برای تهیه یک برنامه (Cross-Language Interoperability)
با وجود تبلیغات زیاد مایکروسافت برروی این مسئله محیط ویندوز هنوز مشکلات زیادی دارد. زبانهای مختلف روشهای متفاوتی را برای فراخوانی توابع ویندوز (API) استفاده می کنند. بعضی از زبانها مانند C++‎ از Unsigned Integer استفاده می کنند که در زبانهای دیگر قابل دسترسی نیستند. مشکل دیگر روش اعلان خطاها به محیط بیرون از یک COM یا یک API است که مثل هم نیستند .

راه حل در .NET:
تمام زبانها در .NET مساوی خلق شده اند! اکثر توانایی های محیط .NET در لایة مشترک آن قرار دارد و نه در خود زبانها. به طور مثال کلاس هایی که با متغیرها، فرم ها،فایلها، بانکهای اطلاعاتی و با XML کار می کنند در خود .NET هستند بنابراین قابلیت و سرعت برنامه های VB .NET دیگر کمتر از C#‎ نیست.(خوانده می شود"سی شارپ ")
اختلاف زبانها بیشتر در جزئیات و Syntax آنها است. برنامه نویسان VB بعد از مدتی کار با VB .NET به راحتی می توانند یادگیری C#‎ را شروع کنند.
وراثت (Inheritance) جزء اصول طراحی کلاس های .NET است. کلاس هایی هم که شما می نویسید می توانند کلاس های .NET را به ارث ببرند و این مسئله استفاده مجدد از کد نوشته شده را راحت می‌کند (Code Reusability) . لازم به ذکر است وراثت به طور مستقیم در مدل COM قابل پیاده سازی نیست.

مشکلات برنامه نویسی اینترنت:
مشکل ASP :
هر برنامه نویس با تجربه ای که برای اولین بار با ASP کار می کند متوجه مشکلات زیادآن می شود. برنامه نویس باید کدهای ASP را در بین تگهای HTML بنویسد و رفع مشکلات برنامه نیز کار بسیار مشکلی است .عملاً نوشتن برنامه های بزرگ با ASP غیر ممکن است .
کدهای ASP هر بار توسط IIS خط به خط تفسیر می شوند( Interprete) که در سرعت اجرای آنها تأثیر منفی دارد.

راه حل در .NET : 
خیلی ها ASP .NET را مهمترین قسمت .NET می دانند . برنامه های ASP .NET را می توانید در محیط های VB .NET ، C#‎ و یا هر زبان دیگر .NET بنویسید. ساخت یک برنامه ASP .NET تا حد زیادی شبیه برنامه های VB است. قسمتهایی از کد که شکل ظاهری صفحات HTML را می سازند (تگها) و کدهای ASP کاملاً از هم جدا شده اند و به راحتی قابل debug هستند این کدها کامپایل می شوند که دو مزیت دارد اول اینکه سریعتر اجرا می شود و دوم (حتی شاید مهم تراز مزیت اول) بسیاری از خطاهای برنامه در زمان کامپایل مشخص می شوند و نه در زمان اجرا.
مزیت دیگری که ASP .NET دارد آن است که حتی در حال اجرا نیز می توانید اسمبلی های جدید را جایگزین کنید. ASP .NET قبل از اجرا آنها را در شاخه دیگری کپی کرده و سپس از آنها استفاده می کند بنابراین نسخه اصلی فایل قابل جایگزینی است و در هنگام یک فراخوانی (Call) جدید در صورت تغییر به شاخه ثانویه کپی و سپس اجرا می شود.با این روش کل یک برنامه ASP .NET را بدون توقف وب سایت می توان جایگزین کرد.
ASP .NET می تواند متغیرهای Session را به جای اینکه برروی کامپیوتر کاربر و بصورت Cookie ذخیره کند ،آنها را در سرور و حتی در بانک اطلاعاتی SQL Server ذخیره نماید. بنابراین حتی اگر کاربر Cookie را در Internet Explorer غیر فعال کرده باشد برنامه های ASP .NET باز هم بخوبی کار می کنند.

دنیای جدید اینترنت:
عرصه های جدیدی به دنیای اینترنت در حال اضافه شدن است در دنیای صنعت و تجارت نیاز ارتباط بین دو کامپیوتر بدون دخالت انسان روزافزون است.
یک برنامه کاربری نیاز دارد اطلاعات کالاها و قیمت روزآنها را از کامپیوتر فروشندگان، اطلاعات قیمت ارز را از وب سایت بانک مرکزی و درخواست ها را از برنامة روی کامپیوتر مشتریان بگیرد و آنها را پردازش کند. همه اینکارها بدون استفاده از مرورگرهای وب و یا Email و به وسیله Web Service و به کمک XML انجام می شود.
Web Service یک برنامه کاربردی است که درخواست را روی اینترنت و با فرمت XML گرفته ،دستورات داخل آنرا پردازش کرده و نتیجه را برای آن کامپیوتر با فرمت XML پس می فرستد. نتیجه می تواند حاوی داده های یک بانک اطلاعاتی و یاحتی نتیجه یک پردازش ریاضی پیچیده باشد. برای آشنایی با XML می توانید به مقالاتی که در این مورد در این وب سایت موجود است مراجعه کنید.
کلاس های زیادی در محیط .NET. برای تولید webService موجود است . .NET همچنین یک پردازشگر سریع XML نیز ارائه داده است.


یکی از بحث بر انگیزترین خصوصیات محیط .NET تولیدکد واسط به جای کد زبان ماشین است. در کد واسط (Intermidiate Language), مسقیماً نام CPU registers و یا آدرسهای حافظه ذکر نمی شود. مفاهیمی همچون استثنا (Exception که نام جدیدی برای Error است) و object شناخته شده است. برنامه نویسان Java کاملاً با مفهوم کد واسط (IL) آشنا هستند.
در این مقاله دلایل روی کرد مایکروسافت به این مفهوم بررسی می شود. ولی قبل از آن ببینیم که کدواسط چگونه کار می کند.
وقتی برنامه های نوشته شده در VB.NET و C#‎ و سایر زبانهای تحت .NET ، کامپایل می شوند به جای زبان ماشین کد واسط تولید می شود. کد واسط با پسوند .exe ، .dll و ... ساخته می شود.
در زمان اجرا این کد توسط یک کامپایلر به نام JIT (Just In Time) به زبان ماشین تبدیل شده و سپس اجرا می شود. علت اینکه مایکروسافت آنرا کامپایلر نامیده و نه مفسر (Interpreter) آن است که JIT عملیات تبدیل به زبان ماشین را فقط در اولین فراخوانی یک متد انجام می دهد و در فراخوانی های بعدی تا زمان پایان اجرای برنامه از همان کد ترجمه شده استفاده می کند.
کدواسط را Managed Code نیز می خوانند. من بهترین ترجمه برای آنرا کد قابل کنترل می دانم.
بسیاری هدف مایکروسافت را از کامپایل دو مرحله ای، ایجاد قابلیت اجرای کد برروی سخت افزارهای مختلف می دانند (Cross-platform) که همان ایده اصلی Java و Virtual Machine است. ولی مایکروسافت بیشتر هدف امنیت و تایید کد را مدنظر دارد.
امنیت کد یعنی اینکه کد درست قبل از اجرا تحت بررسی محیط اجرای .NET قرار گیرد.(مفهوم کدقابل کنترل). در این زمان تمام پارامترهای متدها چک می شود (از نظر تعداد ونوع) همچنین همه اشاره گرهای برنامه در زمانی که نقطه اشاره آنها مشخص است (یعنی زمان اجرا) چک می شوند تا اطمینان حاصل شود که برنامه قسمت هایی از حافظه را که خارج ازمحدودة آن است تغییر نمی دهد. اشاره گرهای اشتباه یکی از مهمترین دلایل fatal Error در ویندوز است.
در ویندوزهای 95 و 98 مشکل در یکی از برنامه های در حال اجرا منجر به اشکال در سایر برنامه ها و حتی خود محیط ویندوز می شود. در ویندوز NT،2000 هر قطعه برنامه در یک پروسه جدا قرار می‌گیرد تا امکان دسترسی به حافظه سایر برنامه ها ممکن نباشد (مفهوم Isolation) . اینکار به قیمت تلف کردن CPU و سایر منابع انجام می شود. حتی با این وجود برنامه نویسان خبره با روشی به نام DLL Injection می توانند به حافظه سایر برنامه ها که به طور همزمان برروی کامپیوتر اجرا می شوند دسترسی یافته و با تغییر محتویات حافظه باعث خرابی آنها و حتی سیستم عامل می شوند. ویروسها از این ضعف نهایت سوء استفاده را می کنند.
.NET با مفهوم کد قابل کنترل می تواند با خیال راحت چند برنامه را در یک پروسه قرار داده و علاوه بر صرفه جویی در منابع، سرعت فراخوانی بین برنامه های مختلف را افزایش دهد.
بنابراین در مقام مقایسه .NET از قابلیت اطمینان بسیار بالاتری برخوردار است.
عملیات چک و تایید کد در زمان اجرا اجباری نیست و Administerator می تواند آنرا برای یک برنامه غیرفعال کند در .NET SDK برنامه ای کمکی با نام PEVerify.exe می تواند عملیات چک و تایید را انجام دهد. بنابراین برنامه نویسان باید این برنامه کمکی را برروی برنامه های خود اجرا کنند تا مطمئن شوند که برنامه از نظر امنیت مشکلی ندارد. در مقالات آتی سرعت اجرای کدواسط و نگرانی های مربوط به آن را بررسی می‌کنیم.

نکاتی در مورد محیط اجرای.NET :

JIT در فایلی به نام MSCorEE.dll قرار دارد. برای اجرای برنامه های نوشته شده در محیط .NET لازم است خود محیط، برروی ویندوز نصب شود. می توانید محیط .NET را از وب سایت مایکروسافت down load کنید. بدین منظور 20 MB فضای خالی روی کامپیوتر خود احتیاج دارید. این محیط با نصب Visual Studio.NET نیز نصب می شود

----------


## ehsan_ansaripoor

با اجازه از بزرگترها بنده به عنوان یه ریز برنامه نویس تمام بحث این تاپیک را خوندم و چیزی که متوجه شدم این بود که عزیزان دلفی کار سنگ Delfi.Net را به سینه می زنند دوستان Vb کار سنگ Vb.Net و یکسری از دوستان هم ++C و #C به نظر من در آینده نه چندان دور دیگه زبانی به نام Delfi.Net یا VB.Net و ++C و... وجود خارجی نخواهد داشت مجموعه عظیمی به نام Visual Stadio.Net به بازار خواهد آمد که در عمل کل زبانهای برنامه نویسی را در خود حل کرده باشد دوستان اگر الان هم Visual Stadio.Net را نگاه کنند موقع انتخاب زبان برنامه نویسی شاید صحبت بنده را تایید کنند

----------


## مهران فروردین

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

----------


## برادران

من یک جورایی  حرفای جناب ehsan_ansaripoor را تایید می کنم !
ولی در حال حاضر C#‎ برای برنامه نویسان ز C , C++‎  خیلی عالی و VB.NET  هم برای VB کارا 
....
فقط باید گفت که C#‎ آینده خوبی داره ، منظورم طراحی میکرو کرنل سیستم عامل  جدید ( آینده )مایکروسافت با این زبان ....   بنابر این C#‎ یکم آینده دار تره !

----------


## بابک زواری

دوست عزیز اگر دقت میکردی این بحث مال دو سال پیش بود

----------


## M.GhanaatPisheh

> طراحی میکرو کرنل سیستم عامل  جدید ( آینده )مایکروسافت با این زبان ....   بنابر این C#‎ یکم آینده دار تره !


دلیل با مزه ای بود.

----------


## SystemAnalyst

> دوست عزیز اگر دقت میکردی این بحث مال دو سال پیش بود


بحث مال 10 سال پیش هم که باشه برای اون کسی که برای اولین بار این رو می خونه تازه است اگر قرار بود با تاپیک های قدیم کاری نداشته باشیم که صاحب این سایت اقدام به حذف آن می کرد چه کاری بود که حجم بانک سایت رو بالا ببره. پس باید نظرمان را در هر تاپیکی که می دونیم بگیم تا دیگران استفاده ببرند.

----------


## omid_Ahmadi

> بحث مال 10 سال پیش هم که باشه برای اون کسی که برای اولین بار این رو می خونه تازه است اگر قرار بود با تاپیک های قدیم کاری نداشته باشیم که صاحب این سایت اقدام به حذف آن می کرد چه کاری بود که حجم بانک سایت رو بالا ببره. پس باید نظرمان را در هر تاپیکی که می دونیم بگیم تا دیگران استفاده ببرند.


شما هم اگر دقت می کردی میدیدی که این بحث هم واسه یک سال پیشه. یعنی بعد از یک سال نیازی به گوشزد کردن این نکته بود؟!؟

----------


## CodeMasterX

> من حقیقتش از این کارای مایکروسافت سر در نمیارم. فکر می‌کنم بیلی آخر عمری عقلشو از دست داده.


با سلام
اول باید خدمت این دوست عزیزمون عرض کنم مایکروسافت تمام کارهاش بدست آقای بیل گیتس نیست.بیل گیتس تقریبا از سال 1998 به بعد مدیریت رو کنار گذاشت و مدیران جدیدی بعد از اون روی کار اومدن و بیل گیست خودش فقط به عنوا ریاست،طراح،نو آور و شاید ناظر بود.بعد از این باید در مورد دات نت یه چیزی بگم.البته اینجا کسانی مثل Inspire و DelphiAssistant از اساتید ما هستند.
ببینید عزیزان دات نت یک Framework Class Library داره که تمام کلاس ها اونجا تعبیه شدن.شما هر کدی و هر نوع پروژهای رو که بخواین بسازین از این کتابخانه کلاس استفاده میشه.حالا شما با هر کدوم از زبان های دات نت از VB.NET گرفته تا j#.NET و C++‎.NET  و  C#‎.NET همه از کلاس های مشترکی استفاده می کنند.پس در کل نمیشه قدرت و برتری رو به یک زبان خاص اختصاص داد به البته درسته ممکنه در اجرا کردن بک سری کد ها و مفاهیم زبانی مثل C#‎.NET راحت تر و سهولتی نسبت به VB.NET داشته باشه اما قدرت و امکانات یکی است!

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

----------


## saeed_rezaei

سلام دوستان
مدتی بود که به سی # علاقه پیدا کردم. کتابی گرفتم و شروع کردم به یاد گیری، اما یه مدتی که گذشت این سوال برام مطرح شد. 
قدرت سی # در چیست؟
آیا فقط به خاطر اینه که سرعت اجرای بالاتری نسبت به وی بی داره (که بعید می دونم به این دلیل باشه).
یه جایی خوندم که دی سی # می شه برنامه هایی رو که زبانهای مختلف رو مورد استفاده قرار داد. این یه کمی برام مبهمه!
اگه دوستان لطفی کنند و در مورد توانایی های سی# قدری توضیح بدن و اینکه چرا به این زبان علاقه مند شدن ما رو مدیون خودشون می کنن.

پیشاپیش ممنونم

----------


## reza.palang

تا اونجایی که من میدونم تفاوت VB و #C فقط و فقط توی syntax هست. یعنی تمام زبان های Net. اینگونه هست. دلیل اینکه من به #C علاقه مند شدم یه مقدازی احمقانه هست، پس بیخیال این قسمت میشم. اما از همون syntaxش خوشم میاد. 
فقط ایراد بزرگی که اینا دارن اینه که حتی برای اجرای برنامه های کوچک هم باید Net. حتمان نسب باشه.

----------


## hdv212

> تا اونجایی که من میدونم تفاوت VB و #C فقط و فقط توی syntax هست


سی شارپ زبانی از خانواده ی سی است ولی از صفر نوشته شده، سی شارپ و جاوا تنها زبانهای استاندارد ISO هستند، سی شارپ زبان پیشفرض دات نت است، سی شارپ از 100% قابلیت های دات نت با بالاترین کارایی استفاده میکند در حالی که در vb.net اینطوری نیست، مثلا در vb.net، تکنولوژی GarbrageCollection باعث ایجاد سربارحاقظه میشود، نکته ی دیگه اینکه datatype هایی که uint هستد در vb.net به خوبی پیاده سازی نشدن، در نتیجه اگر کامپوننتی به زیان سی شارپ نوشته شده باشد و در ان از نوع های uint استفاده شده باشد و در vb.net آن کامپوننت مورد استفاده قرار گیرد، ممکن است برنامه دچار اختلال شد، یکی دیگر از مزیتهای سی شارپ نزدیکی آن به زبان پدر خود یعنی C++‎ است، به طوری که میتوان در برنامه های سی شارپ کدهای unmanage C++‎ نوشت
بسه یا بازم بگم ؟؟
امیدوارم جواب سوالتو گرفته باشی.

----------


## saeed_rezaei

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

----------


## hdv212

خب باید در جواب این سوال شما عرض کنم که سی ++ با وجود قدرت و سرعت زیاد پیچیدگی های خاص خودشو داره مخصوصا در مقوله های پیشرفته مثل MultiInheritance یا ارث بری چند گانه که برنامه ها رو خیلی پیچیده و گاه دچار اختلال و ایجاد OverHeading یا سربارگذاری حافظه میشد، از این رو مایکروسافت به فکر ایجاد زبانی افتاد تا علاوه بر قدرت سی ++، راحتی VB رو هم داشته باشه،از طرفی هم توسعه ی خود سی ++ با وجود پیچیدگی زیاد امکان پذیر نبود، این بود که سی شارپ در سال 2000 همزمان با معرفی دات نت متولد شد،زبانی که از لحاظ قدرت با سی ++ رقابت میکنه و از لحاظ سرعت تولید نرم افزار و مدیریت کد همتا نداره، زبانی که از سی ++ و جاوا تشکیل شده.

----------


## titbasoft

> سی شارپ از 100% قابلیت های دات نت با بالاترین کارایی استفاده میکند در حالی که در vb.net اینطوری نیست





> مثلا در vb.net، تکنولوژی GarbrageCollection باعث ایجاد سربارحاقظه میشود، نکته ی دیگه اینکه datatype هایی که uint هستد در vb.net به خوبی پیاده سازی نشدن، در نتیجه اگر کامپوننتی به زیان سی شارپ نوشته شده باشد و در ان از نوع های uint استفاده شده باشد و در vb.net آن کامپوننت مورد استفاده قرار گیرد، ممکن است برنامه دچار اختلال شد


برای این ها مستنداتی هم دارید؟




> لحاظ قدرت با سی ++ رقابت میکنه و از لحاظ سرعت تولید نرم افزار و مدیریت کد همتا نداره،


آیا برای این هم بنچمارک معتبر دارید؟




> زبانی که از سی ++ و جاوا تشکیل شده.


منظورتون از این عبارت چیه؟

----------


## titbasoft

اصولا چنین مقایسه هایی کار درستی نیست. برای هر مقایسه ای باید معیار در نظر گرفت. هر ابزاری برای رسیدن به هدفی خاص طراحی شده و برای رسیدن به اون هدف هم توسعه داده میشه. زیاد لازم نیست در مورد بحث کنیم چون در این مورد زیاد تاحالا بحث شده و البته بحث بی فایده ای هم هست. این وظیفه طراح هر سیستمی که با توجه به عوامل موثر در پروژه خودش و case study های مختلف، در مورد استفاده از ابزارها تصمیم گیری کنه. برای درک واقعیت باید تعصب رو کنار گذاشت.
http://www.barnamenevis.org/sh...ad.php?t=59570

----------


## omid_Ahmadi

فکر کنم بهتره پستهای titbasoft رو با دقت بخونید، مطالب قبلی که در مورد مقایسه این دو زبان گفته شده بود کاملا بی اساس هستن و در صورت لزوم می شه همه اونها رو به صورت مستدل رد کرد.

----------


## hdv212

omid_Ahmadi عزیز بهتره یه نگاهی به آموزش سی شارپ در 21 روز بندازی.

----------


## PC2st

> زبانی که از سی ++ و جاوا تشکیل شده.


من این مورد رو به کرات در جاهای دیگه دیدم... تقریبا میشه گفت که واقعا سی شارپ شی گرائی خودش رو از جاوا گرفته (بعضی موارد هم شنیدم از دلفی) و همونطور که جاوا از سی++ گرفته شده و سی# سعی کرده بیشتر به سی++ نزدیک باشه، پس به احتمال زیاد، منظور دوستمون همین بوده.




> لحاظ قدرت با سی++ رقابت میکنه و از لحاظ سرعت تولید نرم افزار و مدیریت کد همتا نداره


دقیقا من یک پست در قسمت "بحث و گفتگوی فنی پیرامون دات نت" نوشته بودم، که متاسفانه هنوز تائید نشده و روی سایت *قرار نگرفت* ! ( نمیدونم چرا اون پست من تائید نشد !!! ) در اون پست به یک مقاله انگلیسی برخورده بودم که گفته بود (("همواره سرعت کدهای مدیریت نشده از کدهای مدیریت شده بیشتر نیست")) یعنی در بعضی مواقع کدهای مدیریت شده، سرعت بیشتری به نسبت کدهای مدیریت نشده داشت. جالبه که بدونید سی# کمی ( زیاد نه ) سریعتر از سی++ مدیریت شده بود ! ( البته در اون یک مقایسه نه بصورت کلی ! ) لینکش رو همین زیر میگذارم:

http://www.grimes.demon.co.uk/dotnet/man_unman.htm

البته شاید من اشتباه متوجه شدم، بهر حال خودتون برید ببینید.

----------


## Alireza_Salehi

یک نکته جالب و خنده داری که خیلی جاها من میخونم اینه که مثلا #C یه چیزهایی رو ازجاوا گرفته یا جاوا یه چیزهایی رو از ++C گرفته ، این طوری به نظر میرسه انگار اینا یه قسمت هایی از کدهاشون رو از هم کش میرن !

تا جایی که بنده میدونم اکثر مواردی که در زبان های برنامه نویسی وجود داره یک فناوری منحصربه فرد هستش که روش تحقیق شده و مرجع علمی داره و زبان های برنامه سازی اون رو پیاده سازی می کنند حالا هر کی اول اونو به کاربرد نمیگن بقیه از اون گرفتنش که!

مثل وراثت چندگانه یا امثالهم!

هر زبانی برای کاربردی طراحی میشه ، بنابراین مقایسه زبان های مختلف به این راحتی ها نیست!

مثلا اگر قرار بود VB همه کارهای ++C رو انجام بده که دیگه به این راحتی نبود !

----------


## titbasoft

تنها ارتباط #C با هر زبان دیگه ای فقط Anders Hejlsberg (آرشیتکت #C) می تونه باشه

----------


## titbasoft

> omid_Ahmadi عزیز بهتره یه نگاهی به آموزش سی شارپ در 21 روز بندازی


توی این کتاب چه چیزی گفته شده؟ (تا اونجایی که من می دونم امید اطلاعاتش نسبت به دات نت و البته زبان تخصصیش یعنی #C ، خوبه، پس بیخودی یه حرفی رو نمیزنه)



> در اون پست به یک مقاله انگلیسی برخورده بودم که گفته بود (("همواره سرعت کدهای مدیریت نشده از کدهای مدیریت شده بیشتر نیست")) یعنی در بعضی مواقع کدهای مدیریت شده، سرعت بیشتری به نسبت کدهای مدیریت نشده داشت. جالبه که بدونید سی# کمی ( زیاد نه ) سریعتر از سی++ مدیریت شده بود !


این درسته اما چه ارتباطی به قدرت و سرعت تولید نرم افزار داره؟

----------


## PC2st

> یک نکته جالب و خنده داری که خیلی جاها من میخونم اینه که مثلا #C یه چیزهایی رو ازجاوا گرفته یا جاوا یه چیزهایی رو از ++C گرفته ، این طوری به نظر میرسه انگار اینا یه قسمت هایی از کدهاشون رو از هم کش میرن !


سنتکس رو ... !




> این درسته اما چه ارتباطی به قدرت و سرعت تولید نرم افزار داره؟


خب، توی مطلبی که نوشتم، سرعت اجرای نرم افزار رو به عنوان یک قدرت (توانائی) به حساب آوردم، حالا اگر شما این دو رو جدا از هم میدونید، باشه، من هم موافقم.

----------


## titbasoft

> سرعت *اجرای* نرم افزار رو به عنوان یک قدرت





> این درسته اما چه ارتباطی به قدرت و سرعت *تولید* نرم افزار داره؟


----------

----------


## hdv212

> همونطور که جاوا از سی++ گرفته شده و سی# سعی کرده بیشتر به سی++ نزدیک باشه، پس به احتمال زیاد، منظور دوستمون همین بوده.


PC2st.ir عزیز ممنونم ازت، منم منظورم همین بود.




> توی این کتاب چه چیزی گفته شده؟ (تا اونجایی که من می دونم امید اطلاعاتش نسبت به دات نت و البته زبان تخصصیش یعنی #C ، خوبه، پس بیخودی یه حرفی رو نمیزنه)


چیزایی که من گفتم در مورد دلیل به وجود آمدن سی شارپ و همچنین سربار حافظه ای که در vb.net براثر Garbrage Collection رخ میده و بسیاری چیزای دیگه مطرح شده.

من حدود یه سال پیش یه مقاله ای پیدا کردم در مورد performence برنامه های نوشته شده توسط vb و سی شارپ که برنامه های نوشته شده با سی شارپ performence بهتری  در اجرا داشتند،البته اصل موضوع مربوط به مقایسه ی دو زبان بود، دارم میگردم پیداش کنم به محض اینکه پیداش کردم لینکشو برای اونایی که از حرفای من تعجب کردن میذارم، در ضمن به جای ایراد گرفتن از حرفای من که استدلال نداره، شما اسنادی رو که بر اساس اون میگید حرف من مستدل نیست بیارید، من هم دارم دنبال اسنادم میگردم.

----------


## PC2st

بهرحال، بد ندیدم که به یک مقاله به زبانی غیر از پارسی (!) بگردم، لینکش رو این زیر ملاحظه میکنید:

http://en.wikipedia.org/wiki/Compari...ual_Basic_.NET

اما یک خلاصه از پاراگرافهای اول از مطالب فوق:


C#‎ has taken concepts from other languages, notably *Java* and *Delphi*, combined with a syntax similar to *C* and *Java*.


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

1. بیسیک دات نت برای برنامه های کوچک هست. (small appliaction)
2. سی شارپ برای برنامه های *Enterprise* application development هست.
پس: خودتون نتیجه بگیرید.


1. There are large VB projects that are unusable in VB.Net due to the size of the project.
2. If your solution is likely to include a large number of classes, C#‎ is highly recommended.


همچنین:

Visual Basic .NET culture :

VB historically was a RAD tool, as well as a tool that was usable by untrained developers, or management. As a result of this wider user base, VB allowed for many shortcuts and ease of use features. These features allowed for the uninitiated to create code, but also contributed to maintenance and debugging issues. Examples of the shortcuts allowed in VB
--- Optional declaration of variables 
--- Optional Weak Typing using late binding 
--- Optional Parameters

که البته Optional Parameters رو به کمک دات نت، میشه واسه سی شارپ شبیه سازی کرد.

و همچنین:

C#‎ culture :

C#‎ developers tend to be prior C/C++‎ developers, or Java developers. C#‎ is syntactically very similar to C and Java, the IDEs and command line tools work very similarly, and the culture is the same. Also, C#‎ inherited quite a bit of its style and culture from the Delphi/Object Pascal programming language.

اینا رو از منبع نوشتم و توضیحات خیلی بیشتری که بهتره خودتون برید ببینید.

----------


## PC2st

> قدرت و سرعت *تولید* نرم افزار


بله، حالا فهمیدم منظورتون چی بوده...
اگر قدرت یک زبان رو در سطح پائین تر بودن و ارتباط بیشتر با سخت افزار بدونیم، اون وقت سی++ قوی تر از سی# خواهد بود (برای تولید نرم افزار)، اگر سرعت تولید نرم افزار رو مبنای بر زمان اتمام و طراحی یک نرم افزار برای ویندوز در نظر بگیریم، اون وقت سی# سرعت بیشتری در تهیه و تولید نرم افزار خواهد داشت.

----------


## titbasoft

> اگر قدرت یک زبان رو در سطح پائین تر بودن و ارتباط بیشتر با سخت افزار بدونیم، اون وقت سی++ قوی تر از سی# خواهد بود (برای تولید نرم افزار)، اگر سرعت تولید نرم افزار رو مبنای بر زمان اتمام و طراحی یک نرم افزار برای ویندوز در نظر بگیریم، اون وقت سی# سرعت بیشتری در تهیه و تولید نرم افزار خواهد داشت.


ببین این جمله رو با دقت بخون:



> لحاظ قدرت با سی++ رقابت میکنه و از لحاظ سرعت تولید نرم افزار و مدیریت کد همتا نداره


جمله اول داره در مورد قدرت صحبت می کنه. بعد جمله دوم شروع میشه که میگه #C بی همتاست.



> تقریبا میشه گفت که واقعا سی شارپ شی گرائی خودش رو از جاوا گرفته (بعضی موارد هم شنیدم از دلفی) و همونطور که جاوا از سی++ گرفته شده و سی# سعی کرده بیشتر به سی++ نزدیک باشه، پس به احتمال زیاد، منظور دوستمون همین بوده.





> C#‎ has taken concepts from other languages, notably *Java* and *Delphi*, combined with a syntax similar to *C* and *Java*.


شباهت مفهومی و سینتکسی به معنای این نیست که #C شی گراییش رو از جاوا یا ... گرفته. ببین ممکنه من لباسم رنگ لباس شما باشه، یک معلم داشته باشیم به نام Anders Hejlsberg،  با هم خیلی هم دوست باشیم و خیلی چیزای مشابه داشته باشیم اما این معناش این نیست که اگر لباس من آبیه و لباس شما هم آبیه پس من لباس شما رو پوشیدم .روشن میگم؟

به جای پاسخ طولانی لطفا دقت کنید که این مطالب:



> . ویژوال بیسیک کاربران رو مجبور نمیکنه که حتما به روش شی گرائی برنامه نویسی کنند.
> 2. سی شارپ ساخته شده که فقط به روش شی گرائی برنامه نویسی کنه.
> پس: بعضی از دوستان که میگن سی شارپ، شی گرا تر از بیسیک دات نت است، شاید منظورشون این بوده.
> 
> 1. بیسیک دات نت برای برنامه های کوچک هست. (small appliaction)
> 2. سی شارپ برای برنامه های *Enterprise* application development هست.
> پس: خودتون نتیجه بگیرید.
> 
> 
> ...


تحت عنوان 



> No second class languages


آورده شده اند
و این مطالب:




> Visual Basic .NET culture :
> 
> VB historically was a RAD tool, as well as a tool that was usable by untrained developers, or management. As a result of this wider user base, VB allowed for many shortcuts and ease of use features. These features allowed for the uninitiated to create code, but also contributed to maintenance and debugging issues. Examples of the shortcuts allowed in VB
> --- Optional declaration of variables 
> --- Optional Weak Typing using late binding 
> --- Optional Parameters
> 
> که البته Optional Parameters رو به کمک دات نت، میشه واسه سی شارپ شبیه سازی کرد.
> 
> ...


در مورد فرهنگ دارن صحبت می کنن و فرهنگ استفاده ربطی به قدرت و قص علی هذا نداره

----------


## hdv212

titbasoft عزیز شما به چه نتیجه ای میخوای برسی ؟؟؟

----------


## titbasoft

خیلی ساده:



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

----------


## sgb110

سلام
من که نفهمیدم ماجرا چه جوریاست؟
تویه جا بعد از کلی بحث آخرش به این نتیجه می رسند که vb.net و C#‎ فقط تو سینتک با هم فرق می کنند (البته با کمی تفاوت های قابل گذشت)



> http://www.barnamenevis.org/sh...ad.php?t=59570


بعد تو یه جا دیگه بحث به اینجا می رسه که vb.net برا برنامه های کوچیکه!!!!!!!!!!



> 1. بیسیک دات نت برای برنامه های کوچک هست. (small appliaction)
> 2. سی شارپ برای برنامه های *Enterprise* application development هست.
> پس: خودتون نتیجه بگیرید.



آقا تکلیف من و که می خوام یکی از این دو تا رو شروع کنم رو روشن کنید؟؟؟؟؟؟

----------


## PC2st

> جمله اول داره در مورد قدرت صحبت می کنه. بعد جمله دوم شروع میشه که میگه #C بی همتاست.


از نظر من، این دو جمله معانی جدای از هم داشته و منظور از بی همتائی، همون سرعت تولید و مدیریت کدها بوده که البته میتونه بی همتا نباشه ولی جزء بهترین هاست.

در رابطه با جمله اول :



> لحاظ قدرت با سی++ رقابت میکنه


در پست شماره 10 از همین تاپیک، در مورد تفاوت سرعت اجرای سی++ و سی# توضیح دادم که همواره سرعت سی# (Managed) پائین تر نیست، پس میتونه تا حدودی (نه کاملا) با سی++ (Unmanaged) برابری کنه.
البته بازهم سوء تفاهم نشه، در این حالت، من سرعت رو جزئی از قدرت (توانائی) یک زبان به حساب میآرم و منظورم قدرت در نوشتن برنامه های سیستمی نیست ! اگر منظور اون باشه، سی# حرفی برای گفتن نداره (فکر کنم اینجا حرف شما رو تائید کرده باشم) و در ضمن نمیدونم که بیسیک دات نت چه سرعتی داره و تا حالا هم درباره سرعت بیسیک، حرف نزدم.
بد نیست بگم که به غیر از نرم افزارهای سیستمی، ابزارهائی مثل Multimedia SDK برای سی++ در نظر گرفته شدن (گفتم خودم بگم که بعدا ازم ایراد نگیرید!)

در رابطه با جمله دوم :



> از لحاظ سرعت تولید نرم افزار و مدیریت کد همتا نداره


و اگر اون پست قبلیم که توش یک لینک داده بودم رو نگاه کنید، برای مدیریت کدها نوشته، اگر برنامه ای مینویسیم که دارای تعداد زیادی کلاس هست، بهتره که از سی# استفاده بشه (تا بیسیک) چون:
If your solution is likely to include a large number of classes, *C#‎* is highly recommended
در ضمن سی++ پیچیدگیها و ظرافتهای خاص خودش رو داره و طبعا برای ایجاد یک application با سی++، چزئیات بیشتری رو پیاده سازی نمود. (مثلا در سی++ باید یکبار تابع رو اعلان کنید و بعد باید تابع رو پیاده سازی کنید)




> تحت عنوان No second class languages آورده شده اند


من که مخالفتی ندارم :) قدرت بیسیک رو کار ندارم :) سنتکس اش هست که شاید باعث شده که بیشتر به درد small applications بخوره، در حالیکه میشه باهاش برنامه های بزرگتر هم نوشت!




> در مورد فرهنگ دارن صحبت می کنن و فرهنگ استفاده ربطی به قدرت و قص علی هذا نداره


این مطالب رو همینجوری گذاشتم :) چون تا یکجائی از اون مقاله غیر زبان پارسی (!) رو به صورت گزینشی در این پست گنجانده بودم و منظوری از قدرت و غیره نبود !!! تازه بقیه مقاله رو بیخیال شدم گفتم خودتون بخونید :) وگرنه حتما ذکر میکردم که سی# MultiLine Comments هم داره :) (البته بیسیک.نت امکانات دیگری داره که به درد ساده سازی برای برنامه نویس میخوره)




> شباهت مفهومی و سینتکسی به معنای این نیست که #C شی گراییش رو از جاوا یا ... گرفته.


به نظرم اینجا سوء تفاهمی شده (به احتمال زیاد بدجوری منظور خودم رو عنوان کردم)
دقیقا منظور من از شباهت، شباهت Syntax و نحوه برخورد ظاهر با اشیاء از لحاظ ساختار دستوری و ... بود، که در نوشته زیر هم تائید شده و منظورم نحوه برخورد ساختار زبان برنامه نویسی سی# با اشیاء (نه از لحاظ فنی)، داده ها و ... که بعضی هاش رو از جاوا گرفته و بعضی هاش هم از سی و دلفی (منظورم این نیست که تکنولوژی اش رو گرفته، شکل ساختاری زبان برنامه نویسی یا محیط IDE (که البته محیط IDE ربطی به زبان نداره، گفتم خودم این رو بگم تا بعدا ازم ایراد گرفته نشه!) و ...)
C#‎ has taken concepts from other languages, notably Java and Delphi, combined with a syntax similar to C and Java.
معنی: سی#، *طرز فکر* خودش رو از دیگر زبانها گرفته است، بطور برجسته از جاوا و دلفی، ترکیب شده با یک سنتکس شبیه به سی و جاوا.
و برای همچنین میگه:
C#‎ is syntactically very similar to C and Java, the IDEs and command line tools work very similarly, and the culture is the same.
Also, C#‎ inherited quite a bit of its style and culture from the Delphi/Object Pascal programming language

----------


## PC2st

> آقا تکلیف من و که می خوام یکی از این دو تا رو شروع کنم رو روشن کنید؟؟؟؟؟؟


این دوتا فرقی ندارن، یکیش رو یاد بگیری، اون یکی هم راحت میشه یاد گرفت (چون در واقع در این زبانها، شما با دات نت کار میکنید)
از اینکه نوشته شده بیسیک دات نت برای small application هست، نمیدونم شاید من اشتباه فهمیدم! ولی فکر کنم بخاطر این گفته که به احتمال زیاد، برنامه نویس در برنامه های بزرگتر، سخت تر میتونه پروژه اش رو کنترل کنه و فکر نمیکنم بخاطر قدرتش باشه.

----------


## titbasoft

> The major difference being that VB doesn't force the users to code in a Object Oriented way


این جمله عبارت درستی نیست، بر اساس یک فرض غلط بیان شده و اون هم اینه که میشه با VB.Net غیر OO کد نوشت. تنها چیزی که میشه گفت اینه که #C  کاربر خودش رو مجبور میکنه که تمام جزئیات رو  به صورت خیلی Implicit ذکر کنه، که باز این هم با این جمله ای که ذکر شده خیلی تفاوت داره. 
پس نتیجه ای هم که از این جمله گرفته شده یعنی:



> Bottomline is that the VB.Net is for small application and C#‎ is for Enterprise application development.


هم بر نتیجه گیری از یک استدلال اشتباهه




> آقا تکلیف من و که می خوام یکی از این دو تا رو شروع کنم رو روشن کنید؟؟؟؟؟؟


بهترین پیشنهاد:
سعی کنید خودتون رو توی چهارچوب یک تکنولژی خاص قرار ندید. سعی کنید کمی به جای تکنولژی Science  یاد بگیرید. روشن تر اگر بخوام بگم اینه که سعی کنید برای یاد گرفتن ساختن برنامه بفهمید وقتی یک کد رو می نویسید داره چه اتفاقی میافته، تا اینکه یک کد رو بنوسید که یک اتفاق بیافته. در اون حالت اگر من هم الان بشینم یک زبان جدید برای دات نت به نام #H بوجود بیارم، شما در عرض چند ساعت می تونید باهاش کد بنویسید.

پیشنهاد دوم: اگر پس زمینه کار با C ، جاوا یا دلفی دارید با #C و اگر پس زمینه VB دارید با VB.Net شروع کنید. اگر هم اصلا هیچ پس زمینه ای ندارید و کاملا بلنک بلنک هستید با #C شروع کنید چون یک تصور غلط حاکم بر اون وجود داره که از VB.Net بهتره

----------


## PC2st

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


من هم موافقم که این بحث ها ممکنه نتیجه جالبی نداشته باشه اما بهرحال بد نیست گفته بشه، مثلا شاید کسی هم بیسیک بلد باشه هم سی#، اونوقت با توجه به شرایط (بر اساس گفته شما) یکیش رو انتخاب میکنه و در آخر نتایج بحث این خواهد شد که هر زبان برای چه شرایطی خوبه.

----------


## titbasoft

@PC2st.ir: مرسی از پاسخ هاتون. به نظر من بحث روشنه و زیادی پیچیدش نکنیم بهتره

مجددا از همه دوستان خواهش می کنم به این قسمت توجه کنند:


> سعی کنید خودتون رو توی چهارچوب یک تکنولژی خاص قرار ندید. سعی کنید کمی به جای تکنولژی، Science یاد بگیرید. روشن تر اگر بخوام بگم اینه که سعی کنید برای یاد گرفتن ساختن برنامه بفهمید وقتی یک کد رو می نویسید داره چه اتفاقی میافته، تا اینکه یک کد رو بنوسید که یک اتفاق بیافته. در اون حالت اگر من هم الان بشینم یک زبان جدید برای دات نت به نام #H بوجود بیارم، شما در عرض چند ساعت می تونید باهاش کد بنویسید.

----------


## PC2st

چشم :)
کاملا با شما موافقم.
چون بحث زیاد منحرف شد ( خودم زیادی منحرفش کردم، ببخشید... )

----------


## sgb110

خیلی ممنون تقریبا جوابم رو گرفتم
اما در مورد بیسیک که دوستی گفتند 




> سخت تر میتونه پروژه اش رو کنترل کنه


منظورش رو نفهمیدم؟

----------


## PC2st

> سخت تر میتونه پروژه اش رو کنترل کنه


این حدسی بود که زدم به خاطر همون کلمه small appliacation.....
و مهم نیست، چون به قول جناب titbasoft، مسئله انتخاب زبان (بین سی# و بیسیک.نت) در دات نت تا این حد بزرگ نیست که جلوه کنه.
اصل همون تفکرات برنامه نویسیه، نه زبان برنامه نوسی.

----------


## __H2__

سلام
من اطینان میدهم که مطلقاَ تفاوتی ندارند و مباحثی که دوستان مطرح میکنند صرفاَ ناشی از عدم اطلاع ایشان از تواناعی های زبان دیگر است، اساتید #C خیلی میبخشند! ولی چون به زبان VB.Net مسلط نیستند و نمیتوانند مثلاَ فلان کار را در VB.Net به راحتی #C انجام دهند، سریع مشکل را به ذات VB.Net وصل میکنند و لحظه ای تعمل نمیکنند که ما #C کار هستیم نه VB کار، پس طبیعی است که با کار در محیط VB.Net دچار مشکل میشویم.

به دوستانی هم که میخواهند از بین VB.Net و #C یکی را انتخاب کنند، اول میگویم که انتخاب بسیار خوبی کرده اند و با هر یک از این دو زبان به راحتی میتواندد پروژه های مختلف را بنویسند و در انتخاب باید صرفاَ به سینتکس ها توجه کنند و از هر کدام بیشتر خوششان آمد همان را انتخاب کنند.

----------


## Alireza_Salehi

> سلام
> من اطینان میدهم که مطلقاَ تفاوتی ندارند و مباحثی که دوستان مطرح میکنند صرفاَ ناشی از عدم اطلاع ایشان از تواناعی های زبان دیگر است، اساتید #C خیلی میبخشند! ولی چون به زبان VB.Net مسلط نیستند و نمیتوانند مثلاَ فلان کار را در VB.Net به راحتی #C انجام دهند، سریع مشکل را به ذات VB.Net وصل میکنند و لحظه ای تعمل نمیکنند که ما #C کار هستیم نه VB کار، پس طبیعی است که با کار در محیط VB.Net دچار مشکل میشویم.
> 
> به دوستانی هم که میخواهند از بین VB.Net و #C یکی را انتخاب کنند، اول میگویم که انتخاب بسیار خوبی کرده اند و با هر یک از این دو زبان به راحتی میتواندد پروژه های مختلف را بنویسند و در انتخاب باید صرفاَ به سینتکس ها توجه کنند و از هر کدام بیشتر خوششان آمد همان را انتخاب کنند.


من هم اطمینان میدهم مطلقا این حرف شما اشتباه است و فقط در مورد برنامه نویسان مبتدی صحت داره، شما اگر به هر دو زبان مسط باشید باید بدانید هر کدام این زبان ها ابزار هایی دارند که در دیگری یافت نمی شود ،( منظورم اصلا دات نت فریمورک نیست) ، در نسخه 2003 تفاوت این دو زیاد بود ولی در 2005 این تفاوت بسیار کم شده ، ولی به صفر نرسیده است!
Iterators , Operator overloading ,متد های بی نام و .....
به عنوان یک مثال خیلی پیش پا افتاده از keyword های این دو زبان: کلمه using قبلا(2003) در VB وجود نداشت! یا مثلا with که در VB خیلی کد نویسی رو راحت میکنه در #C کجاست؟
یا مثلا ممکنه برای کاری در #C یک خط کد کافی باشه ولی در VB چند خط و برعکس!
مطالب خیلی پیشرفته تری وجود داره که برید مطالعه کنید تا متوجه بشید.

مصمئنا و بدون شک ماهیت هر کدام از این دو زبان باعث می شود برخی از کارها در یکی از این دو راحت تر انجام شود.


پست شماره 27 titbasoft دوباره بخونید.

----------


## sgb110

سلام
PC2st.ir تو یکی از پستاشون یه متنی رو گذاشته بودند من اون رو گرفتم و خوندم اما منظور از
No second class languages
*ر*و نفهمیدم

میشه توضیح بدین منظور ازNo second class languages چیه؟

----------


## PC2st

> مصمئنا و بدون شک ماهیت هر کدام از این دو زبان باعث می شود برخی از کارها در یکی از این دو راحت تر انجام شود.


منم موافقم :)




> میشه توضیح بدین منظور از No second class languages چیه؟


یعنی بدون زبان درجه 2...
That is, all of the various Microsoft languages should have the same level of access to all OS features, and all expose the same level of power and usability.
بطور خلاصه یعنی: تمام زبانهای مایکروسافت مشابه (یکسان) هستند از لحاظ سطح دسترسی به سیستم عامل و قدرت و قابلیت استفاده. (فکر کنم منظورش در حیطه Managed بوده)

همینطور که به مشخصات جدید سی# 3 و بیسیک.نت 9 دفت کنید، خواهید دید امکانات مشابهی (یکسانی) رو به نسخه جدیدشون اضافه کردند.

----------


## SalarSoft

ببینید گذشته از تفاوت هایی که دوستان مطرح کردند؛ 

در VB.NET هنوز امکان برنامه نویسی مانند گذشته (VB6) وجود داره.
یعنی هنوز می تونی خیلی کثیف کد نویسی کنی و به نتیجه هم برسی! از جمله مهمترین اینها Late binding است.

نمونه دیگری که در این باره می تونم مطرح کنم نحوه به کار گیری فرم ها است.
برای مثال می تونید از سایر فرم ها های پروژه تان بدون تعریف نمونه استفاده کنید.


Private Sub ّForm1_Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
 Form2.Show()
 Form2.Text = "Hello from form1"
End Sub


در ظاهر شاید این یک ویژگی به نظر برسه ولی سمی مهلک است که قالب شربت به برنامه نویسان تازه کار خورانده میشود. ( البته این مورد از dotNET 2 فراهم شده)


ساختار زبان C#‎ به گونه ای است که برنامه نویس کمتر می تواند کثیف کد نویسی کند و این امکان برای او کمتر فراهم شده است.


در مجموع بهترین زبان برای برنامه نویسی دات نت #C است.
ولی اگر امکانات #C برای کار با .NETشما را راضی نمی کند بروید به دنبال C++‎.NET

----------


## hdv212

دوستان اگه قرار بود سی شارپ و vb با هم یکی باشند، پس چه نیازی بود که مایکروسافت به فکر ایجاد زبانی تازه بیفته ؟ خوب همون C++‎ رو توسعه میداد، واسه چی سی شارپ رو تولید کرد ؟

الان باز یکی گیر میده که کی گفته سی شارپ و vb با هم یکی هستند، منظورم از لحاظ طرز کار و performence برنامه ها و کلا از لحاظ امکانات برنامه نویسی و تکنولوژی است.

----------


## __H2__

> من هم اطمینان میدهم مطلقا این حرف شما اشتباه است و فقط در مورد برنامه نویسان مبتدی صحت داره، شما اگر به هر دو زبان مسط باشید باید بدانید هر کدام این زبان ها ابزار هایی دارند که در دیگری یافت نمی شود ،( منظورم اصلا دات نت فریمورک نیست) ، در نسخه 2003 تفاوت این دو زیاد بود ولی در 2005 این تفاوت بسیار کم شده ، ولی به صفر نرسیده است!
> Iterators , Operator overloading ,متد های بی نام و .....
> به عنوان یک مثال خیلی پیش پا افتاده از keyword های این دو زبان: کلمه using قبلا(2003) در VB وجود نداشت! یا مثلا with که در VB خیلی کد نویسی رو راحت میکنه در #C کجاست؟
> یا مثلا ممکنه برای کاری در #C یک خط کد کافی باشه ولی در VB چند خط و برعکس!
> مطالب خیلی پیشرفته تری وجود داره که برید مطالعه کنید تا متوجه بشید.
> 
> مصمئنا و بدون شک ماهیت هر کدام از این دو زبان باعث می شود برخی از کارها در یکی از این دو راحت تر انجام شود.
> 
> 
> پست شماره 27 titbasoft دوباره بخونید.


سلام
دوست عزیز معیار من همیشه آخرین ورژن است.
1- Operator overloading کاملا و بدون شک در VB.Net پشتیبانی میشه
2- در مورد متدهای بی نام هم لطفاَ کمی توضیح دهید.
3- Iterators هم که با یک Collection در VB قابل حل است.
3- در مورد دستور زیبا With هم حق با شماست ولی نباید تصور کرد که این دستور کار شاقی انجچام میدهد! کافی است یک متغییر در #C تعریف کنید و مقدار را در آن بریزید و هرکجا نیاز داشتید از آن استفاده کنید، (دقیقاَ With هم در باطن همین کار را میکند) منظورم انکار تفاوتها نیست ولی چیزهایی که به این راحتی حل میشود تفاوت به حساب نمی آید.


باز هم میگم مشکل سر عدم اطلاع از کارآی ها است.
بدون شک من که بیشتر وقتم را با Basic صرف نکردم نباید انتضار داشته باشم تمام قابلیت های #C را بشناسم و به همان سرعت و قدرت که در VB کد نویسی میکنم در #C کد نویسی کنم و منطقی نیست تا کاری را نتوانستم در #C انجام دهم بگویم #C نمیتواند فلان کار را انجام دهد! باید بگویم من تجربه کافی کار با #C را ندارم و نتوانستم فلان کار را به راحتی انجام دهم.

----------


## PC2st

> 2- در مورد متدهای بی نام هم لطفاَ کمی توضیح دهید.


متدهائی که بدون اینکه نامی داشته باشند، در یک شئ delegate قرار میگیرند.




> Iterators هم که با یک Collection در VB قابل حل است.


ببخشید، منظورتون رو نفهمیدم که چطور میشه با Collection مشکل رو حل کرد.




> کافی است یک متغییر در #C تعریف کنید و مقدار را در آن بریزید و هرکجا نیاز داشتید از آن استفاده کنید، (دقیقاَ With هم در باطن همین کار را میکند)


فکر نمیکنم که with چنین کاری انجام بده، بلکه در هنگام کامپایل، فضای نام مربوطه (یا کلاس مربوطه) رو اضافه میکنه (تا آدرس دهی بشه)، شاید هم شما درست بگی.




> بدون شک من که بیشتر وقتم را با Basic صرف نکردم نباید انتضار داشته باشم تمام قابلیت های #C را بشناسم و به همان سرعت و قدرت که در VB کد نویسی میکنم در #C کد نویسی کنم و منطقی نیست تا کاری را نتوانستم در #C انجام دهم 
> بگویم #C نمیتواند فلان کار را انجام دهد! باید بگویم من تجربه کافی کار با #C را ندارم و نتوانستم فلان کار را به راحتی انجام دهم.


دوست عزیز، منظور این نیست که بیسیک.نت توانائی مقابله با سی# رو نداره. منظور سنتکس بیسیک.نت هست، علاوه بر موارد قبلی که گفته شد، با فرض اینکه یک برنامه نویس تازه کار، بخواد در محیط بیسیک.نت شروع به کد نویسی کنه، ممکنه که خیلی از مفاهیم برنامه نویسی رو نفهمیده باشه، مثلا به قول دوستمون:



> برای مثال می تونید از سایر فرم ها های پروژه تان بدون تعریف نمونه استفاده کنید.


پس در واقع برنامه نویسی میکنه و از جزئیاتش چیزی نمیفهمه و میاد در سی# مینویسه:

form1.Show();

کامپایل ارور میده و میگه که کلاس نمونه سازی نشده! (اصلا چنین شئ ائی وجود نداره !)
همونطور که من در سی# عملیات باکسینگ و اینباکسینگ رو بدون نوشتن کد اضافی ( و تنها بصورت casting ) انجام میدم، بیام در سی++ چنین کاری بکنم با error روبرو میشم.

به قول قدیمیها: نه به اون شوری شور (سی++) نه به این بی نمکی (بیسیک.نت) ... البته شوخی کردم، اجهاف نشه... بیسیک.نت خیلی بی نمک نیست، کمی از سی# بی نمک تر است چون در نهایت کد نهائی هر جفتشون IL میباشد. ایراد نگیرید، میدونم، شوری و بی نمکی رو شرایط موجود تعیین میکنند. مثلا اگر هدف نوشتن برنامه های خفن (!) باشه، شوری شور میشه اسمبلی و بی نمک میشه سی++ ( همه این شوری ها و بی نمکی ها از لحاظ سنتکس بود که گفتم )

همچنین در تکمیل گفته هام بگم که بعدا معترض نباشید:
1. با بیسیک.نت میشه برنامه های خوب و کاملی نوشت و نمیشه مخالف این بود.
2. نوشتن برنامه ها با بیسیک.نت هیچ ایرادی نداره، چون در نهایت به کد IL ترجمه میشه.
3. و غیره ( بقیه اش رو خودتون بهتر میدونید ) ...

از لحاظ محیط دات نت و کد تولید شده IL، زیاد فرقی نمیکنه که برنامت رو با بیسیک.نت بنویسی یا سی#، ولی باید مد نظر داشت که برنامه نویس به چه روشی تفکراتش رو پیاده میکنه ( هر زبان یک روش برای پیاده سازی افکار برنامه نویسش داره ) و این روش چه تاثیری بر عملکرد برنامه نویس در طراحی برنامه، میگذاره. این هم قبول دارم که روش پیاده سازی افکار برنامه نویس، در سی# و بیسیک.نت به اندازه تفاوت سی و پاسکال نیست.

----------


## __H2__

سلام مجدد!
باز هم ان متدهای بی نام را نگرفتم! با ارز شرمندگی
اگر منظورتان تعریف یک Delegate و استفاده از آن است، در VB هم میتوان اینکار را کرد.

Public Delegate Sub AAA(ByVal BBB As Integer)


و اما در مورد Iterators

Public Class AAA
Implements System.Collections.IEnumerable
 
Private Class BBB
  Implements System.Collections.IEnumerator
 
  'For Access to members of AAA
  Private ReadOnly _Owner As AAA
  Private _Counter As Integer = 0
 
  Public Sub New(ByVal Owner As AAA)
    MyBase.New()
    Me._Owner = Owner
  EndSub
 
  Public ReadOnly Property Current() As Object Implements System.Collections.IEnumerator.Current
    Get
      ReturnMe._Counter
    End Get
  End Property
 
Public Function MoveNext() As Boolean Implements System.Collections.IEnumerator.MoveNext
  Me._Counter += 1
  Return (Me._Counter > 10)
End Function
 
  Public Sub Reset() Implements System.Collections.IEnumerator.Reset
    Me._Counter = 0
  End Sub
 
End Class
 
Public Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
  Return New BBB(Me)
End Function
 
End Class

به این کد دقت کنید، در دستور ForeEach قابل استفاده است و به ترتیب عددی تا رسیدن به 10 بر میگرداند (مسخره است! ولی مثال خوبی است) اگر هم باز مشکل دارید کد #C بدهید تبدیلش به VB.Net با من (نه اینکه یک کتاب کد #C بدهید! حداکثر چند خط.)

بحث نمایش فرم ها هم و آن کد بی ریخت را هم قبول دارم، (به قول یکی از دوستان کد کثیف!) ولی این کد هم صرفاَ برای Upgrade راحت از VB6 است تا برنامه نویسان قدیمی کمتر دچار مشکل شوند و رقبت بیشتری به VB.Net نشان دهند و مایکروسافت از شر VB6 کارها خلاص شود. (مثل همان کدهای غیر امن در #C)

با اجازه دوستان برخی از امکانات کمتر دانسته VB را به اختصار می آورم!!!!
تعریف مجدد همه اپراتورها

Public Shared Operator +(ByVal a As TypeName, ByVal b As TypeName) As TypeName

(حتی اپراتورهای تبدیل به/از کلاسس مورد نظر)

پشتیباین کامل از تمام جنبه های وراثت از جمله تعریف مجدد متدها-اجازه دادن و یا جلوگیری از تعریف مجدد متدها (بستن وراثت) و نیز خود کلاسها، تعریف اجباری و غیر وراثتی متدها با نام مشابه در کلاسس پایه و...

Custom کردن رویدادها
تعریف متغییر در بدنه شروع حلقه For i As Integer = 0 To 10

تبدیلات واقعی کلاسسها و تبدیلات قالب ریزی (که هزینه زمانی کمتری دارند)

C#‎
(int)A
VB.Net
DirectCast(A, Integer)


پشتیبانی کامل از نوع های generic یا همان template در ++C
مدیریت هندلینگ runtime رویدادها با AddHandler و RemoveHandler (=+ , =- در #C)


فعلاَ بداهه چیز خاصی که گمان کنم بعضی از دوستان مطلع نیستند یادم نمی آید.
با تشکر از دوستان
فعلاَ بای ...

----------


## PC2st

> اگر منظورتان تعریف یک Delegate و استفاده از آن است، در VB هم میتوان اینکار را کرد.


خیر، منظور delegate نیست. منظور متد بی نامی است که در delegate قرار گرفته.




> و اما در مورد Iterators


ببخشید که اینطور میگم، ولی این کلاسهائی که شما نوشتی، شباهتی به Iterators ها در سی# نداره ! شما فقط توسط متد MoveNext به مقدار _Counter اضافه میکنید و در متد GetEnumerator فقط یک شئ نمونه سازی شده از کلاس BBB برگشت داده میشه ! فکر کنم کدهاتون رو اشتباه نوشته باشید ( باور کنید من هنوز نمیدونم که این قابلیت در بیسیک.نت وجود داره یا نه! ).

راستی در مورد گفته قبلی خودم یعنی:



> از لحاظ محیط دات نت و کد تولید شده IL، زیاد فرقی نمیکنه که برنامت رو با بیسیک.نت بنویسی یا سی#


این رو اضافه کنم که *کد نهائی (IL) تولید شده برای سی# کمتر* است !مثلا برنامه کامپایل شده با سی# 20 کیلو بایت و همون برنامه با بیسیک.نت 28 کیلو بایت شده ! یا برای سی# شده 28 و برای بیسیک.نت شده 40 ! ولی بازهم همه میدونیم که هردو از دات نت استفاده میکنن و کد کامپایل شده هر دوشون هم به IL تبدیل میشه ! پس دلیل این افزایش حجم، میتونه از خلاصه کاریهای بیسیک.نت باشه (نمیدونم این رو از خودم گفتم، شاید شما دلیل دیگه ای داشته باشید).

----------


## __H2__

سلام علیکم برادران و آبجیان ارجمند!!!
(ببخشید کمی زیاد کمی زیاد است، ولی لطفاَ با دقت بخوانید، برای با خسته نشدن حضار جسارت کرده و متن را از طنزهای لطیفی وراثت گرفته ام!)

خوبید یا بهترید؟! دشمنی تان با VB تمام نشده؟! باشه ایرادی نداره! ما سعی میکنیم یک کمیسون دات نتی، وراثتی، صفر و یکی، جهت آشتی ملی و گفتمان دات نتی (یک چیزی تو مایه های گفتگوی تمدن ها!) تشکیل بدیم!!!!!!!!!! یا حداقل به آن ادامه بدیم!

ادامه گفتمان دات نتی!
قابلیت Iterators چیزی بجز پشتیبانی راحت از رابطهای IEnumerator و IEnumerable نیست (و البته دوقولوهای Generic شان).
قابلیت Iterators در اصل یک نوع پارتی بازی #C برای پیاده سازی دو رابط فوق است.
باز هم دوستان دچار سوء تفاهم نشوند، نمیخواهم چیزی از ارزش این قابلیت کم کنم ولی آیا برای پیاده سازی هر واسطی باید دستور خاصی وجود داشته باشد؟ یا شاید #C کارها برای پیاده سازی هر واسطی دستور هلو وار و جدید و مخصوصی میخواهند؟(معرفت بگذارید به من پیرمرد کمتر ناسزا بگید!) آیا #C کارها که دستور Mid و CInt، CLng، CDbl، With، و... را ندارد لنگ مانده اند؟ یا شاید VB کارها که دستور yield را ندارند لنگ مانده اند؟!
پشتیبانی از دو رابط فوق را میتوان بدون پارتی بازی برای آنها و صرفاَ با قوانین اصلی وراثت و پلیمورفیزم مثل دیگر رابط ها انجام داد.

برای درک کامل مطلب به کدهای زیر که شامل پیاده سازی رابطهای فوق در #C و VB و استفاده از آنها هستند دقت کنید.
بدیهی است که به علت پارتی بازی #C از دو رابط فوق کد تعریف به شدت کاهش یافته (3+1 متد تعریف اجباری وجود دارد که باید تعریف شوند) ولی کد استفاده کاملاً یکسان است و دارای یک مقدار کدنویسی ثابت هستند، این افزایش کد هم در هیچ یک از رابطهای دیگر وجود دیده نمیشود.
البته راه حل دیگری هم در VB وجود دارد، که بسیار کم کد است و به درستی و سرعت کار میکند ولی از نظر زیرساختی نمیتوان آن را معادل Iterators به حساب آورد ولی همان کار را انجام میدهد

//C#‎ declare
--------------------------------------------------
public class SampleClass
{
   public static System.Collections.IEnumerable SampleIterator(int maxvalue)
   {
      for (int iCounter = 0; iCounter <= maxvalue; iCounter++)
      {
         yield return iCounter;
      }
   }
}
 
//C#‎ using
--------------------------------------------------
foreach (int i in SampleClass.SampleIterator(7))
{
  //Any code.
}



'VB.Net declare
--------------------------------------------------
Public Class SampleClass
 
   Private Class IEnumerableClass
      Implements System.Collections.IEnumerator
      Implements System.Collections.IEnumerable
 
      Private iCounter As Integer = -1
      Private ReadOnly maxvalue As Integer
 
      Public Sub New(ByVal maxvalue As Integer)
         MyBase.New()
         Me.maxvalue = maxvalue
      End Sub
 
      Private ReadOnly Property Current() As Object Implements System.Collections.IEnumerator.Current
         Get
            Return Me.iCounter
         End Get
      End Property
 
      Private Function MoveNext() As Boolean Implements System.Collections.IEnumerator.MoveNext
         Me.iCounter += 1
         Return (Me.iCounter <= Me.maxvalue)
      End Function
 
      Private Sub Reset() Implements System.Collections.IEnumerator.Reset
         Me.iCounter = -1
      End Sub
 
      Private Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
         Return Me
      End Function
 
   End Class
 
   Public Shared Function SampleIterator(ByVal maxvalue As Integer) As System.Collections.IEnumerable
      Return New IEnumerableClass(maxvalue)
   End Function
 
End Class
 
 
//VB.Net using
--------------------------------------------------
For Each i As Integer In SampleClass.SampleIterator(7)
  'Any Code.
Next


راه حل با کد کمتر که همان کار را میکند ولی معادل فنی و زیر ساختی Iterators نیست.


'VB.Net declare
--------------------------------------------------
Public Class SampleClass
 
   Public Shared Function SampleIterator(ByVal maxvalue As Integer) As System.Collections.IEnumerable
      Dim ret As New System.Collections.ArrayList
      For iCounter As Integer = 0 To maxvalue
         ret.Add(iCounter)
      Next
      Return ret
   End Function
 
End Class
 
//VB.Net using
--------------------------------------------------
For Each i As Integer In SampleClass.SampleIterator(7)
  'Any Code.
Next


راستی بحث به جای جالبی کشید! خیلی جالب! از دوستانت عزیز بابت پافشاری و یادآوری آن فراوان فراوان تشکر میکنم!؟!؟!؟!؟ (خاصه دوست عزیز PC2st.ir و استاد arsp_2004 ! با اجازه دوستان و خارج از شوخی، من واقعاً ایشان را به عنوان مرجع ناطق #C قبول دارم.)

همان طور که Form1.Show کد نویسی را کم میکند، yield هم کد نویسی را کم میکند و همان طور که دستور کثیف Form1.Show یک VB کار تازه کار را از فهم عمیق و درک کامل اعمالی که در پسضمینه انجام میشود دور میکند، دستور غیر کثیف yield هم همین بلا را بر سر #C کارهای غیر تمام حرفه ای در می آورد! میدانید چرا؟ مطمئناً و بدن شک بیش از 85 درصدر #C کارهای همینجا نمیدانند و yield را معجزه #C و چیز عجیب و خارق العاده ای تصور میکنند ولی در زیر ساخت همان کاری انجام میشود که من در نمونه کد اول با VB.Net انجام دادم (البته با الگوریتمی متفاوت)، و یک کلاسس کمکی توسط #C ساخته میشود که دو رابط فوق را تعریف میکند.
دوستانی هم که میدانند، حتماً مثل من هنوز کجکاو بوده اند و از خودشان پرسیده اند که چگونه #C مقید به OOP در یک تابع یک رابط را برمیگرداند که باید در یک نوع ساختار تعریف شده باشد در حالی که خروجی return تابع اصلاً ربطی به خروجی نهایی ندارد و مثلاَ میتواند یک Integer باشد.

پس این Form1.Show ما به yield شما در! البته مجبورم مجدداَ به گفته همان کاربر قبلی صحه بگذارم و اعتراف کنم که Form1.Show کثیف تر از yield است. ولی بحرحال این به آن در!

راستی دوستان شفیق #C کار به اون قابلیت های کوچک ولی مفید که گفتم بعضی، بعضی، بعضی #C کارها فکر میکنند فقط در زبان آنها وجود دارد، دستور Continue را هم برای استفاده در حلقه ها اضافه کنند.

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

----------


## omid_Ahmadi

@P16 - HDV212:




> چیزایی که من گفتم در مورد دلیل به وجود آمدن سی شارپ و همچنین سربار حافظه ای که در vb.net براثر Garbrage Collection رخ میده و بسیاری چیزای دیگه مطرح شده.


خیلی جالبه، شما می فرمایید وقتی کدی با VB.NET نوشته می شه، اجرای اون باعث سرباری به نام GC میشه در صورتی که در C#‎ این سربار وجود نداره (یا هر مورد مشابه دیگه ای)؟

بهتره به یه نکته توجه کنید. مواردی مثل GC زمان اجرای یه برنامه که تحت ران تایم CLR اجرا می شن شروع به کار می کنن. در اون شرایط هم کدی که به وسیله JIT برای اجرا آماده میشه، کد IL هست، نه کد VB و یا C#‎ و یا ... 
پس اگر GC بخواد که برای کدهای VB اجرا بشه و سرباری رو ایجاد کنه ولی برای کدهای C#‎ اجرا نشه، میشه در مورد نحوه کار اون به این صورت نتیجه گیری کرد که CLR هنگام اجرای یه کد IL ابتدا بررسی می کنه که زبان اولیه اون کد چی بوده (اولین کار غیر ممکن). اگر VB بوده GC رو برای مدیریت حافظه اجرا می کنه و سربار به وجود میاد. در صورتی که C#‎ بوده باشه ... (نمی دونم وقتی GC برای مدیریت حافظه برنامه های C#‎ اجرا نشه که سربار به وجود نیاد، پس شاید میشه گفت که برنامه هایی که با C#‎ نوشته می شن به مدیر حافظه نیازی ندارن!!! یا شاید شما سولوشن دیگه ای رو می خواهید ارائه بدید)

اگر در کتاب آموزش C#‎ که خوندن اون رو به من توصیه می کنید چنین موردی نوشته شده، فکر نویسنده اون احتیاج داره مقداری مطالعاتش رو در مورد معماری .NET گسترش بده، بعد شروع به نوشتن کتاب کنه!




> من حدود یه سال پیش یه مقاله ای پیدا کردم در مورد performence برنامه های نوشته شده توسط vb و سی شارپ که برنامه های نوشته شده با سی شارپ performence بهتری در اجرا داشتند،البته اصل موضوع مربوط به مقایسه ی دو زبان بود، دارم میگردم پیداش کنم به محض اینکه پیداش کردم لینکشو برای اونایی که از حرفای من تعجب کردن میذارم، در ضمن به جای ایراد گرفتن از حرفای من که استدلال نداره، شما اسنادی رو که بر اساس اون میگید حرف من مستدل نیست بیارید، من هم دارم دنبال اسنادم میگردم


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

این برنامه ها همه به زبان IL تبدیل شده و بعد اجرا میشن. در زمان اجرا هم معلوم نیست که زبان اولیه VB بوده، C#‎ بوده و یا ... پس همه در زمان اجرا روند ثابت و معینی رو طی می کنن. پس اگر برای اجرای کدی که به زبان IL نوشته میشه، برای مثال مجبوره GC اجرا بشه و اجرای GC هم باعث به وجود آمدن اورهد میشه، این اورهد در همه برنامه های .NET وجود داره، چه وی بی، چه C#‎ چه کوبول و ...


پس بحث برتری C#‎ به وی بی در زمان اجرا که منتفیه. در مورد سرعت طراحی و پیاده سازی هم در انتهای این پست توضیح داده شده.
در پست 40 گفتن که 




> *کد نهائی (IL) تولید شده برای سی# کمتر* است !مثلا برنامه کامپایل شده با سی# 20 کیلو بایت و همون برنامه با بیسیک.نت 28 کیلو بایت شده ! یا برای سی# شده 28 و برای بیسیک.نت شده 40 !


خوب این مورد هم کلیت نداره،ممکنه توی زبان VB یه سری سینتکسها باعث یشن که کد IL بیشتری برای پیاده سازی اونها نیاز باشه، اما با فرض اینکه دو برنامه مشابه در دو زبان C#‎ و VB نوشته شدن (یعنی از فیچرهای خاص زبان که توی زبان دیگه معادل نداره، استفاده نشده باشه) و با دو کامپایلری که به یه اندازه کد رو اپتیمایز می کنن هم به IL تبدیل بشن، نباید کد تولید شده در حدی که ایشون می گن تفاوت داشته باشن. البته دقت کنید که من نمی گم کدهای IL تولید شده در این حالت دقیقا مشابه و یکسان هستن، چون اصلا این طور نیست (در این مورد قبلا توی سایت صحبت شده) اما کد IL تولیدی برای این دو زبان اونقدر متفاوت نیست که دو برنامه مشابه، یکی به 20 KB و دیگری به 40 KB کد تبدیل بشن. 
اگر چنین اتفاقی بیفته، مشخص میشه که مشکل از کامپایلر هست. خوب باز هم این مورد به زبان مربوط نمیشه، سما می تونی یه کامپایلری برای VB بنویسی که کد IL اپتیمایز تولید کنه و حجم مناسبی هم داشته باشه.
قبلا مقالاتی به فارسی توی این سایت قرار داده بودم که مطالعه دقیق اونها می تونست به رفع خیلی از این ابهامات کمک کنه. به دوستان توصیه می کنم که برای اینکه مطلب برای خودشون روشن بشه، حتما نگاهی هم به اون مطالب داشته باشن.

@P17 - PC2st.ir:




> 1. بیسیک دات نت برای برنامه های کوچک هست. (small appliaction)
> 2. سی شارپ برای برنامه های *Enterprise* application development هست.
> پس: خودتون نتیجه بگیرید.


من نمی دونم منظور از این حرف چیه و در نگاه اول اونقدر غیر منطقی به نظر میرسه که لازم نیست برای رد اون دلیلی اورد. احتمالاً نوسنده مظور دیگه ای داشته که باید با بحث دقیقتر مشخص بشه.

@P36 - HDV212:




> دوستان اگه قرار بود سی شارپ و vb با هم یکی باشند، پس چه نیازی بود که مایکروسافت به فکر ایجاد زبانی تازه بیفته ؟ خوب همون C++‎ رو توسعه میداد، واسه چی سی شارپ رو تولید کرد ؟


خوب، از اول همین رو بپرس تا درست به یه جواب مستدل و منطقی برسیم.
احتمالاً دوستانی که مقداری در رابطه با پلت فرم .NET مطالعه دارن، Jeffrey Richter نویسنده Applied .NET Framework (I & II) رو میشناسن. در صفحه اول از فصل اول کتاب ایشون (نگارش اول) نوشته شده:




> In fact, at runtime, the CLR has no idea which programming language the developer used for
> the source code. *This means that you should choose whatever programming language*
> *allows you to express your intentions most easily*. You can develop your code in any 
> programming language you desire as long as the compiler you use to compile your code
> targets the CLR.
> *So, if what I say is true, what is the advantage of using one programming language over*
> *another?* Well, I think of compilers as syntax checkers and "correct code" analyzers. They 
> examine your source code, ensure that whatever you've written makes some sense, and
> then output code that describes your intention. Different programming languages allow you
> ...


فکر کنم جواب قانع کننده و مستدلی باشه.

----------


## Alireza_Salehi

__H2__ عزیز ، اینجا کسی سر جنگ با VB نداره (من خودم با هر دو زبان کار میکنم مشکلی هم ندارم) ، اصولا یکی از دلایل وجودی فریمورک از میان بردن تفاوت های باطنی زبان هاست ، حالا تفاوت های ظاهری بسته به سلیقه برنامه نویس انتخاب می شوند. :چشمک:  

شاید یک برنامه نویسی با ساختار کد نویسی #C راحت باشه و یکی دیگه با VB ، شاید در یک زبان (به دلیل ساختارش ) کاری راحت تر انجام بشه و برعکس و این دلیل نقص یکی و برتری دیگری نیست ، 

مطمئنا تفاوت های این دو در حدی نیست (خصوصا در نسخه 2005) که به دلیل قدرت ، سرعت و ... بر دیگری ترجیح داده بشه ، من آخرین نقل قول پست 42 رو کاملا تایید میکنم. 

در ضمن چرا فقط این دو تا رو مقایسه میکنید این همه زبان تحت دات نت: 
 .NET Languages

C#‎ VS VB 2005
C#‎ VS VB 2003 
جسارتا اساتید عزیز جهت اطلاع از قابلیت های جدید این دو زبان در نسخه 2005 اینجا رو ببینید:
http://www.devx.com/MicrosoftISV/Article/29045
http://msdn2.microsoft.com/en-us/lib...x2(vs.80).aspx
http://msdn2.microsoft.com/en-us/lib...37(vs.80).aspx
حرف آخر این که : (البته زیاد جدی نگیرید)  :بامزه:  
اگر می خواهید واقعا لذت برنامه نویسی رو درک کنید با ++Visual C (البته Unmanaged) برنامه بنویسید ، end کد نویسی ، end سینتکس ، end قدرت ، end سرعت و .....  :کف کرده!:  !

----------


## PC2st

> اما کد IL تولیدی برای این دو زبان اونقدر متفاوت نیست که دو برنامه مشابه، یکی به 20 KB و دیگری به 40 KB کد تبدیل بشن.


یک Windows Application در سی# و یکی دیگه در بیسیک.نت ایجاد کنید و در Form1 از هر کدومشون، هر کنترلی رو که دوست دارید، اضافه کنید (مثلا 5 الی 10 کنترل) بعدش (بدون حتی ایجاد تغییری در برنامه) هردوی اونها رو کامپایل کنید. سایز هر یک رو مشاهده کنید.

----------


## PC2st

بعد از اون ایرادهائی که گرفتم، ترجیح میدم این دو رو به گونه ای مقایسه کنم که ارزشهای بیسیک.نت نادیده گرفته نشه:


ابتدا عیب ها و مزیتهای بیسیک.نت رو مورد بررسی قرار میدیم :
1 مربوط به عیب بیسیک.نت و 2 مربوط به مزیت حاصل شده در آن است.


--- بیسیک.نت : تنظیمات متفاوت برای کامپایل کردن کدها.
--- سی# : تا جائی که میدونم، چنین چیزی نداره.
1) عیب : عدم هماهنگی بین کدهای نوشته شده توسط هر برنامه نویس.
2) مزیت : کنترل برنامه نویس بر کامپایل کدهای نوشته شده توسط خودش.


--- سی# : به مقررات کدنویسی پای بند است. 
--- بیسیک.نت : زیاد به مقررات کدنویسی پایبند نیست، مثل استفاده از From1.Show() بدون ایجاد نمونه از Form1.
1) عیب : کد نویسی بصورت غیر اصولی.
2) مزیت : سازگاری با VB.


--- سی# : پارامترهای اختیاری، نداره.
--- بیسیک.نت : پارامترهای اختیاری داره.
توضیح : باید توجه داشت که وقتی یک متد دارای پارامترهای متفاوت هست، معمولا پیاده سازی های متفاوتی هم داره.
1) عیب : نمیدونم!
2) مزیت : سرعت در پیاده سازی متدهای خاص و همچنین ارتباط راحت تر با Office


--- بیسیک.نت : کلمه کلیدی With داره.
--- سی# : کلمه کلیدی With نداره.
توضیح : با عملیات Copy و Paste میتوان نتیجه مطلوب رو بکار برد.
1) عیب : نمیدونم!
2) مزیت : سرعت در نوشتن کدهای تکراری.


--- بیسیک.نت : Error Handling جالبی رو با Catch ارائه میده، یعنی Catch ex As IO.FileLoadException When attempt < 3
--- سی# : تا اونجائی که من میدونم، چنین چیزی نداره.


--- سی# : از Switch استفاده میکنه و به طبع باید break ها رو هم در آخر هر case قرار بده.
--- بیسیک.نت : از کلمه کلیدی Select Case استفاده میکنه و احتیاجی به آوردن break بعد از هر Case نیست و انعطاف بیشتری داره.
1) عیب : نمیدونم!
2) مزیت : افزایش سرعت در کد نویسی برای Select Case های طولانی.


--- بیسیک.نت : بیشتر به زبان گفتاری نزدیکه و سعی داره مفاهیم برنامه نویسی رو به زبان گفتاری نزدیکتر کنه.
--- سی# : از علائم و کلمات خاص برنامه نویسی، استفاده میکنه.
توضیح : یافتن بلاکها به کمک علائم } و { راحت تر است.
1) عیب : نوشتن کدها طولانی تر میشه.
2) مزیت : کدها راحت تر فهمیده میشه.




حال، عیب ها و مزیتهای سی# را مورد بررسی قرار میدهیم :
1 مربوط به عیب سی# و 2 مربوط به مزیت حاصل شده در آن است.


--- سی# : دارای عملگرهای کاهش و افزایش است.
--- بیسیک.نت : چنین عملگری ندارد.


--- سی# : سنتکس سی#، انعطاف بیشتری داره، مثلا میتوان از عمل انتساب بصورت چندگانه استفاده کرد یا از (,) سود برد و ...
--- بیسیک.نت : تا جائی که من میدونم، سنتکس بیسیک.نت، انعطاف کمتری به نسبت سی# داره.
1) عیب : نمیدونم!
2) مزیت : افزایش سرعت در کد نویسی و کاهش حجم کدهای نوشته شده.


--- سی# : به بزرگی و کوچکی حروف، حساس است.
--- بیسیک.نت : حساس نیست و برای حساس شدن به بزرگی و کوچکی اشیاء ایجاد شده، نیاز به کاراکترهای [ و ] داره.
1) عیب : ایجاد دو نام که تنها تفاوتشون ناشی از کوچکی و بزرگی باشه، میتونه جالب نباشه یا یک برنامه نویس مبتدی، با مشکل روبرو بشه.
2) مزیت : کنترل بیشتر بر نامهای تولید شده توسط برنامه نویس.


--- هم در بیسیک.نت هم در سی#، یک دستور را میتوان در چند خط نوشت، اما در سی# این کار راحت تر صورت میگیرد.

--- برنامه کامپایل شده توسط سی# حجم کمتری به نسبت همین برنامه در بیسیک.نت دارد.

--- در سی# موارد زیر هم ساپورت میشه :
1. Iterators
2. اشاره گرها
3. متدهای بدون نام
4. کامنت در چند خط


_این مطلب با توضیحات دوستان BlackDal، __H2__ و بخصوص linux، ویرایش شد..._


میدونم که گفتن جملاتی مثل "این زبان واسه small application" یا "این زبان سنتکس اش جالب تره" یا ... جملاتی هست که باعث میشه بحث *منحرف* بشه. ولی مطمئن هستم که اگه مشخصات هر زبان رو توضیح بدیم و *مقایسه* بشه، آنوقت خود برنامه نویس باید تشخیص بده که کدومش خوب هست و دیگه بحث منحرف نمیشه.

----------


## omid_Ahmadi

فکر کنم برای درک اینکه بحث بیهوده ای در این تاپیک پیش گرفته شده، یک بار دیگه نقل قول آخر پست 42 خونده بشه، کافی باشه.

----------


## حامد مصافی

> --- سی# : به مقررات کدنویسی پای بند است و مثلا باید تمام casting ها قید بشه، در غیر اینصورت برنامه کامپایل نخواهد شد. 
> --- بیسیک.نت : زیاد به مقررات کدنویسی پایبند نیست و مثلا لازم نیست همه casting ها قید بشه.
> 1) عیب : کد نویسی بصورت غیر اصولی (کثیف).
> 2) مزیت : سرعت در عملیات کد نویسی.


سعی کردی برنامه ای رو در حالت Option Explicit On بنویسی؟و لابد نمی دونی که این گزینه الان دیگه جز تنظیمات کامپایلر شده (علاوه بر امکان استفاده دز کد)





> --- بیسیک.نت : Error Handling جالبی رو با Catch ارائه میده، یعنی Catch ex As IO.FileLoadException When attempt < 3
> --- سی# : تا اونجائی که من میدونم، چنین چیزی نداره.


صد البته که داره، داخل پرانتز یک مقدار استثنا تعریف کنید




> --- سی# : دستورات با ; پایان میپذیرند، پس حتی میتوان ادامه عبارات داخل " را در خطوط بعدی نوشت.
> --- بیسیک.نت : دستورات در هر خط پایان میپذیرند مگر اینکه از _ استفاده کنیم ولی برای عباراتی که داخل " هستند (رشته ها) نمیتوانیم رشته ای را در چند خط بنویسیم و از _ استفاده کنیم (چون بعنوان یک کاراکتر از رشته به حساب میآد) و مجبور میشیم که از عملگر += استفاده کنیم.
> 1) عیب : افزایش حجم عملیات برنامه، ناشی از عمل انتساب.
> 2) مزیت : نمیدونم!


متاسفانه اشتباهه!

a = "string and " & _
   "more!"



> --- سی# : دارای عملگرهای کاهش و افزایش است.
> --- بیسیک.نت : چنین عملگری ندارد.
> 1) عیب : نمیدونم!
> 2) مزیت : سرعت در کد نویسی و انعطاف بیشتر.


اگر به جای 

i = i +1
بنویسید 

i++
سرعت کدنویسی خود را افزایش داده اید؟؟؟





> --- سی# : در ساختار Error Catching به گونه ایست که ارورهای بیشتری رو Catch میکنه، مثل متغیرهای مقدار اولیه نگرفته یا کد مرده و ...
> --- بیسیک.نت : تا جائی که اطلاع دارم، نداره.


در وی بی دات نت امکان غلط یابی هنگام کد به مراتب بیشتر از سی شارپ است.
البته این حرکت مایکروسافت به نظر من در پروژه های بزرگ (به خصوص با یک کامپیوتر ضعیف) آزار دهندست!






> --- سی# : کامنتها دارای انعطاف بیشتری هستند. مثل کامنتهای چند خطی، XML comments.
> --- بیسیک.نت : کامنتها دارای انعطاف کمتری هستند.
> 1) عیب : نمیدونم!
> 2) مزیت : XML comments برای طراحی کلاسها، کامنتهائی حرفه ای به وجود میآره و کامنتهای چند خطی هم به درد توضیحات طولانی میخوره.


در وی بی دات نت قبل از عنوان یک متد سه علامت کوتیشن ( ' ) رو پشت سر هم بذار (مثل /// در سی شارپ) !






> سی# : به بزرگی و کوچکی حروف، حساس است.
> بیسیک.نت : حساس نیست.
> 1) عیب : ممکنه برای کاربر تازه کار، مشکل به وجود بیاره.
> 2) مزیت : کنترل بیشتر بر نامها، مثلا شئ ایجاد شده میتونه هم نام با نوع داده باشه ولی حرف اولش کوچکتر باشه، پس در نتیجه، نوع شئ راحت تر تشخیص داده میشه.


نمی خوای در مورد مزیتی که نوشتی دوباره فکر کنی؟؟؟


قبلاً هم در پست دیگری به این مطلب اشاره کرده ام که تمامی این تفاوت ها فقط و فقط تفاوت های سینتکسی هستند و بس!
پارامترهای اختیاری در وی بی حمایت می شوند. اما مایکروسافت برنامه نویسان هر رو زبان را به استفاده از متد های چند گانه دعوت کرده است!
متد های بی نام در سی شارپ پشتیبانی می شوند اما مایکروسافت آن را مذمت کرده و به برنامه نویسان هر دو گروه توصیه در نامگذاری آنها کرده!
...

*بابت پایان بخشیدن به بحث متد های بی نام باید بگم همونطوری که در بالا گفتم این امکان در وی بی دات نت پشتیبانی نمی شه*

تمامی این تفاوت ها و امثالهم فیچر هایی هستند که از زبان های قبلی 






> دوست عزیز، منظور این نیست که بیسیک.نت توانائی مقابله با سی# رو نداره. منظور سنتکس بیسیک.نت هست، علاوه بر موارد قبلی که گفته شد، با فرض اینکه یک برنامه نویس تازه کار، بخواد در محیط بیسیک.نت شروع به کد نویسی کنه، ممکنه که خیلی از مفاهیم برنامه نویسی رو نفهمیده باشه، مثلا به قول دوستمون:
>      نقل قول:
>                                                                       نوشته شده توسط *SalarSoft* 
> _برای مثال می تونید از سایر فرم ها های پروژه تان بدون تعریف نمونه استفاده کنید._
> 
> پس در واقع برنامه نویسی میکنه و از جزئیاتش چیزی نمیفهمه و میاد در سی# مینویسه:
>      کد:
>      form1.Show(); 
> کامپایل ارور میده و میگه که کلاس نمونه سازی نشده! (اصلا چنین شئ ائی وجود نداره !)


این هم یکی از *تفاوت* های این دو زبان است. و باز هم مایکروسافت به برنامه نویسان وی بی دات نت توصیه کرده از استفاده از نسخه پیش ساخته اشیا پرهیز کنند چون باعث به خطر افتادن برنامه میشود. (هرچند خود من استفاده می کنم)







> من هم اطمینان میدهم مطلقا این حرف شما اشتباه است و فقط در مورد برنامه نویسان مبتدی صحت داره، شما اگر به هر دو زبان مسط باشید باید بدانید هر کدام این زبان ها ابزار هایی دارند که در دیگری یافت نمی شود ،( منظورم اصلا دات نت فریمورک نیست) ، در نسخه 2003 تفاوت این دو زیاد بود ولی در 2005 این تفاوت بسیار کم شده ، ولی به صفر نرسیده است!
> Iterators , Operator overloading ,متد های بی نام و .....
> به عنوان یک مثال خیلی پیش پا افتاده از keyword های این دو زبان: کلمه using قبلا(2003) در VB وجود نداشت! یا مثلا with که در VB خیلی کد نویسی رو راحت میکنه در #C کجاست؟
> یا مثلا ممکنه برای کاری در #C یک خط کد کافی باشه ولی در VB چند خط و برعکس!
> مطالب خیلی پیشرفته تری وجود داره که برید مطالعه کنید تا متوجه بشید.
> 
> مصمئنا و بدون شک ماهیت هر کدام از این دو زبان باعث می شود برخی از کارها در یکی از این دو راحت تر انجام شود.


بله! بدون شک! تفاوت وجود دارد.
اما بحث اساسی بر سر برتری است






> برای درک کامل مطلب به کدهای زیر که شامل پیاده سازی رابطهای فوق در #C و VB و استفاده از آنها هستند دقت کنید.
> بدیهی است که به علت پارتی بازی #C از دو رابط فوق کد تعریف به شدت کاهش یافته (3+1 متد تعریف اجباری وجود دارد که باید تعریف شوند) ولی کد استفاده کاملاً یکسان است و دارای یک مقدار کدنویسی ثابت هستند، این افزایش کد هم در هیچ یک از رابطهای دیگر وجود دیده نمیشود.
> البته راه حل دیگری هم در VB وجود دارد، که بسیار کم کد است و به درستی و سرعت کار میکند ولی از نظر زیرساختی نمیتوان آن را معادل Iterators به حساب آورد ولی همان کار را انجام میدهد
>      کد:
> //C#‎ declare
> --------------------------------------------------
> public class SampleClass
> {
> public static System.Collections.IEnumerable SampleIterator(int maxvalue)
> ...


هر چی به این کد ها نگاه کردم نتونستم خودمو قانع کنم که با نیت یکسانی نوشته شده اند!



ما حصل کلام اینکه:
*تفاوت وجود داره اما برتری یکی نسبت به دیگری نه!*

----------


## PC2st

> سعی کردی برنامه ای رو در حالت Option Explicit On بنویسی؟و لابد نمی دونی که این گزینه الان دیگه جز تنظیمات کامپایلر شده (علاوه بر امکان استفاده دز کد)


در این مورد، فقط بعنوان مثال به casting اشاره کردم تا مشخص بشه که بیسیک.نت سخت گیری نمیکنه برای کد نویسی صحیح... صد البته همون Form1.show هم در این مورد قرار میگیره. حالا شما گفتی Option Explicit On داره، چه بهتر :) ( برای اینکه دیگه مشکلی پیش نیاد، این مورد رو ویرایش کردم )






> متاسفانه اشتباهه!



a = "string and " & _
   "more!"

منظورم رو خوب منتقل نکردم، پس با کد منظورم رو بیان میکنم:

dim sql as string = "SELECT *" & vbCrLf
  sql += "FROM SomeSuchTable" & vbCrLf
  sql += "WHERE ID='WhatHaveYou'" & vbCrLf
  sql += "ORDER BY ThisAndThatField ASC "

حالا اگه شد، کد فوق رو بدون += در چند خط خرد کنید!



در مورد عملگر ++ و افزایش سرعت:
خودت بگو، کدوم سریعتره ؟

int a = 2, b = 3;
int c = ( ++a ) * ( ++b );

یا

int a = 2, b = 3;
a += 1;
b += 1;
int c = a * b;

که در موارد پیچیده تر، بیشتر بروز پیدا میکنه.






> صد البته که داره، داخل پرانتز یک مقدار استثنا تعریف کنید


نداره :) منظورم اون قسمت When attempt < 3 بود.






> در وی بی دات نت امکان غلط یابی هنگام کد به مراتب بیشتر از سی شارپ است.
> البته این حرکت مایکروسافت به نظر من در پروژه های بزرگ (به خصوص با یک کامپیوتر ضعیف) آزار دهندست!


اتفاقا برعکس، همین سخت گیری سی#، اشکال زدائی برنامه رو از همون اول میگیره و باعث میشه که مشکل برنامه به جاهای حادتر نرسه تا در پروژه های بزرگتر، کمتر به مشکل برسیم و البته این نظر شماست و قابل احترامه...






> نمی خوای در مورد مزیتی که نوشتی دوباره فکر کنی؟؟؟


شما فکر کنید :) در خیلی مواقع، شئ ساخته شده از FileInfo رو با نام fileInfo بکار میبرم یا مثلا برای پارامترهای متد، انواع Point را با پارامتر point در قسمت پارامترها ذکر میکنم.






> قبلاً هم در پست دیگری به این مطلب اشاره کرده ام که تمامی این تفاوت ها فقط و فقط تفاوت های سینتکسی هستند و بس!


مورد سنتکس و اثرش روی IL رو میتونید در مورد مقایسه switch و Select Case مقایسه کنید :)






> در وی بی دات نت قبل از عنوان یک متد سه علامت کوتیشن ( ' ) رو پشت سر هم بذار (مثل /// در سی شارپ) !


ممنون. پست رو ویرایش کردم و این یک عیب رو از بیسیک.نت برداشتم.

----------


## linux

> در این مورد، فقط بعنوان مثال به casting اشاره کردم تا مشخص بشه که بیسیک.نت سخت گیری نمیکنه برای کد نویسی صحیح... صد البته همون Form1.show هم در این مورد قرار میگیره. حالا شما گفتی Option Explicit On داره، چه بهتر :) ( برای اینکه دیگه مشکلی پیش نیاد، این مورد رو ویرایش کردم )
> 
> 
> 
> a = "string and " & _
>    "more!"
> 
> منظورم رو خوب منتقل نکردم، پس با کد منظورم رو بیان میکنم:
> 
> ...


بجای این بحث ها چرا نمی آید در مورد طراحی یک زبان جدید برنامه نویسی برای .نت کار کنید.فکر کنید یک زبان برنامه نویسی به زبان فارسی دارید.
مثلا اینجوری کد بنویسید
کلاس فرم1
رویداد بارگذاری فرم 
بشناس عدد ازنوع عددصحیح
عدد = 100
من.متن=عدد
پایان رویداد
پایان کلاس

در ضمن
پس زمینه درست هست


dim sql as string = "SELECT *" & vbCrLf
  sql += "FROM SomeSuchTable" & vbCrLf
  sql += "WHERE ID='WhatHaveYou'" & vbCrLf
  sql += "ORDER BY ThisAndThatField ASC "

این کد را بصورت زیر هم می توانید بنویسید


Dim sql AsString = "SELECT *" & vbCrLf & _
"FROM SomeSuchTable" & vbCrLf & _
"WHERE ID='WhatHaveYou'" & vbCrLf & _
"ORDER BY ThisAndThatField ASC "

همه عملگر های =+ و =- و =* و =& را می توانید در ویژوال بیسیک استفاد کنید
عمگرهای >> و << هم می توانید استفاده کنید
در مورد نام گذاری من جایی ندیدم که پیشنهاد بدهند که از نام یک کلاس به همان صورت و تنها با بزرگ یا کوچک نوشتن حرف یک مقدار جدید ساخته شود.
حالا اینجا را ببنید
کد ویبی

PublicFunction tst(ByVal a AsInteger) AsInteger
SelectCase a
Case 1
a = 10
Return a
Case 2
a = 20
Return a
EndSelect
EndFunction


کد سی شارپ 

publicint tst(int a)
{
switch (a)
{
case 1:
a = 10;
return a;
case 2:
a = 20;
return a;
}
return a;
}


il ویبی

.method public instance int32 tst(int32 a) cil managed
{
.maxstack 2
.locals init (
[0] int32 tst,
[1] int32 VB$t_i4$L0)
L_0000: ldarg.1 
L_0001: ldc.i4.1 
L_0002: sub 
L_0003: switch (L_0012, L_0018)
L_0010: br.s L_001e
L_0012: ldc.i4.s 10
L_0014: starg.s a
L_0016: ldarg.1 
L_0017: ret 
L_0018: ldc.i4.s 20
L_001a: starg.s a
L_001c: ldarg.1 
L_001d: ret 
L_001e: ldloc.0 
L_001f: ret 
}


il سی شارپ

.method public hidebysig instance int32 tst(int32 a) cil managed
{
.maxstack 2
.locals init (
[0] int32 CS$0$0000)
L_0000: ldarg.1 
L_0001: stloc.0 
L_0002: ldloc.0 
L_0003: ldc.i4.1 
L_0004: sub 
L_0005: switch (L_0014, L_001a)
L_0012: br.s L_0020
L_0014: ldc.i4.s 10
L_0016: starg.s a
L_0018: ldarg.1 
L_0019: ret 
L_001a: ldc.i4.s 20
L_001c: starg.s a
L_001e: ldarg.1 
L_001f: ret 
L_0020: ldarg.1 
L_0021: ret 
}

نتیجه هر چقدر کدها شبیه هم باشند خروجی های il هم شبیه ترند برنامه نویسان ویبی با کنار گذاشتن کتابخانه microsft.visualbasic که توابع ویبی را در اختیار می گذارد و با استفاده کردن از توابع .نت می توانند یک برنامه استاندارد .نت بنویسند.
در مورد اختلاف بین اندازه فایلهای سی شارپ و ویبی اگر شما این کدها بالا را کامپایل کنید 8 کیلوبایت فایل exe ویبی بزرگتر خواهد بود بخاطر استفاده از کلاس my که در C#‎ نیست
یعنی شما هر پروژه ویبی که میسازید خود ویبی کلاس my را به پروژه شما اضافه می کنید هر چقدر برنامه بزرگتر باشد کلاس My هم بزرگتر شده و حجم فایل ویبی بیشتر خواهد شد

----------


## حامد مصافی

> نقل قول:
>                                                  در وی بی دات نت امکان غلط یابی هنگام کد به مراتب بیشتر از سی شارپ است.
> البته این حرکت مایکروسافت به نظر من در پروژه های بزرگ (به خصوص با یک کامپیوتر ضعیف) آزار دهندست!                                 
> اتفاقا برعکس، همین سخت گیری سی#، اشکال زدائی برنامه رو از همون اول میگیره و باعث میشه که مشکل برنامه به جاهای حادتر نرسه تا در پروژه های بزرگتر، کمتر به مشکل برسیم و البته این نظر شماست و قابل احترامه...


در سی شارپ دات نت هنگام ساخت پروژه لیست خطا ها و اخطار ها رو نشون میده. اما در وی بی دات نت بعد از دکمه Enter هر خط غلط یابی میشه!! نظر من نیست فناوری ه مایکروسافته!!





> خودت بگو، کدوم سریعتره ؟
>      کد:
>      int a = 2, b = 3;
> int c = ( ++a ) * ( ++b ); 
> یا
>      کد:
>      int a = 2, b = 3;
> a += 1;
> b += 1;
> ...


اگر منظورت سرعت اجراست که برابرند. اما اگر منظورت سرعت نوشتن کدهاست باید ازت بخوام یک روتین برای خواندن فایل های متنی در سی شارپ بنویسی و البته در وی بی دات نت (با فضای نامی My)





> نداره :) منظورم اون قسمت When attempt < 3 بود.



// try catch exception
int zero = 0;
try
{
    int div = 100/zero;
}
catch(DivideByZeroException)
{
    Console.WriteLine("Division by zero exception passed");
}






> نقل قول:
>                                                  نمی خوای در مورد مزیتی که نوشتی دوباره فکر کنی؟؟؟                                 
> شما فکر کنید :) در خیلی مواقع، شئ ساخته شده از FileInfo رو با نام fileInfo بکار میبرم یا مثلا برای پارامترهای متد، انواع Point را با پارامتر point در قسمت پارامترها ذکر میکنم.


این چه حرفیه که میزنی دوست عزیزم؟؟!! 
نکنه فکر می کنی در وی بی نمی تونید شئ ساخته شده از FileInfo رو با نام fileInfo بکار ببری؟؟ 
  PascalCase , camelCase و تمامی متد های نامگذاری متغیر ها در تمامی زبان ها پشتیبانی می شوند. شما در همه زبان های می توانید بزرگی و کوچکی نام متغیر ها را خودتان انتخاب کنید.


در مورد بقیه موارد هم بابک خان توضیح دادند

----------


## PC2st

> این کد را بصورت زیر هم می توانید بنویسید



Dim sql AsString = "SELECT *" & vbCrLf & _
"FROM SomeSuchTable" & vbCrLf & _
"WHERE ID='WhatHaveYou'" & vbCrLf & _
"ORDER BY ThisAndThatField ASC "

در مورد vbCrLf، باید از عمگر & استفاده کرد، و فکر نمیکنید که استفاده از این عملگر تاثیری در سرعت برنامه میگذاره (از لحاظ حجم انجام عملیات) ؟



جناب linux، در مورد *Select و switch* تا حدودی حق با شماست ولی در نظر داشته باشید که در یک فرم خالی در بیسیک.نت، متد Form1_Load خروجی IL به شکل زیر داره:

.method private instance void Form1_Load(object sender,
class [mscorlib]System.EventArgs e) cil managed
{
// Code size 1 (0x1)
.maxstack 8
IL_0000: ret
} // end of method Form1::Form1_Load

حال کدهای زیر رو در Form1_Load در بیسیک.نت مینویسیم:

Dim A = 0, B AsByte
SelectCase A
Case 0, 1, 2
B = 9
Case 3
B = 10
EndSelect

یک دستور Select ساده، حالا برنامه رو کامپایل کنید و دوباره خروجی IL رو در مورد Form1_Load نگاه کنید، خروجی اش شبیه به زیر هست:

.method private instance void Form1_Load(object sender,
class [mscorlib]System.EventArgs e) cil managed
{
// Code size 114 (0x72)
.maxstack 3
.locals init ([0] object A,
[1] uint8 B,
[2] object VB$t_ref$L0)
IL_0000: ldc.i4.0
IL_0001: box [mscorlib]System.Int32
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.2
IL_0009: ldloc.2
IL_000a: ldc.i4.0
IL_000b: box [mscorlib]System.Int32
IL_0010: ldc.i4.0
IL_0011: call object [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Operators::  CompareObjectEqual(object,
object,
bool)
IL_0016: call bool [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions  ::ToBoolean(object)
IL_001b: brtrue.s IL_004d
IL_001d: ldloc.2
IL_001e: ldc.i4.1
IL_001f: box [mscorlib]System.Int32
IL_0024: ldc.i4.0
IL_0025: call object [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Operators::  CompareObjectEqual(object,
object,
bool)
IL_002a: call bool [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions  ::ToBoolean(object)
IL_002f: brtrue.s IL_004d
IL_0031: ldloc.2
IL_0032: ldc.i4.2
IL_0033: box [mscorlib]System.Int32
IL_0038: ldc.i4.0
IL_0039: call object [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Operators::  CompareObjectEqual(object,
object,
bool)
IL_003e: call bool [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions  ::ToBoolean(object)
IL_0043: brtrue.s IL_004d
IL_0045: ldc.i4.0
IL_0046: box [mscorlib]System.Boolean
IL_004b: br.s IL_0053
IL_004d: ldc.i4.1
IL_004e: box [mscorlib]System.Boolean
IL_0053: call bool [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Conversions  ::ToBoolean(object)
IL_0058: brfalse.s IL_005f
IL_005a: ldc.i4.s 9
IL_005c: stloc.1
IL_005d: br.s IL_0071
IL_005f: ldloc.2
IL_0060: ldc.i4.3
IL_0061: box [mscorlib]System.Int32
IL_0066: ldc.i4.0
IL_0067: call bool [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.Operators::  ConditionalCompareObjectEqual(object,
object,
bool)
IL_006c: brfalse.s IL_0071
IL_006e: ldc.i4.s 10
IL_0070: stloc.1
IL_0071: ret
} // end of method Form1::Form1_Load

حالا دستور switch به شکل زیر باشه در سی#

byte A = 0, B;
switch( A )
{
case 0:
case 1:
case 2:
B = 9;
break;
case 3:
B = 10;
break;
}

خروجی IL تنها به اندازه زیر است:

.method private hidebysig instance void Form1_Load(object sender,
class [mscorlib]System.EventArgs e) cil managed
{
// Code size 27 (0x1b)
.maxstack 1
.locals init ([0] uint8 A,
[1] uint8 CS$0$0000)
IL_0000: ldc.i4.0
IL_0001: stloc.0
IL_0002: ldloc.0
IL_0003: stloc.1
IL_0004: ldloc.1
IL_0005: switch ( 
IL_001a,
IL_001a,
IL_001a,
IL_001a)
IL_001a: ret
} // end of method Form1::Form1_Load

لطفا به تفاوت کد Select من و خودتون دقت کنید! یعنی اینقدر تفاوت زیاد بود ؟!

خب، حالا در این مورد، از نظر شما بیسیک.نت چه کار اضافی انجام داده که حجم IL اش *اینقدر* از سی# بیشتره؟!






> در مورد اختلاف بین اندازه فایلهای سی شارپ و ویبی اگر شما این کدها بالا را کامپایل کنید 8 کیلوبایت فایل exe ویبی بزرگتر خواهد بود بخاطر استفاده از کلاس my که در C#‎ نیست


نکته جالبی بود، ممنون.

----------


## PC2st

> در سی شارپ دات نت هنگام ساخت پروژه لیست خطا ها و اخطار ها رو نشون میده. اما در وی بی دات نت بعد از دکمه Enter هر خط غلط یابی میشه!!


منظور گرفتن خطا پس از Enter یا ... نیست. منظور کنترل Catch برای متغیرهائیست که هنوز مقداری نگرفته اند یا ...






> باید ازت بخوام یک روتین برای خواندن فایل های متنی در سی شارپ بنویسی و البته در وی بی دات نت (با فضای نامی My)


لطفا بیشتر توضیح بدید...






> نکنه فکر می کنی در وی بی نمی تونید شئ ساخته شده از FileInfo رو با نام fileInfo بکار ببری؟؟


منظورم این بود :

Point point = new Point(0,0);

----------


## linux

> Dim sql AsString = "SELECT *" & vbCrLf & _
> "FROM SomeSuchTable" & vbCrLf & _
> "WHERE ID='WhatHaveYou'" & vbCrLf & _
> "ORDER BY ThisAndThatField ASC "
> 
> در مورد vbCrLf، باید از عمگر & استفاده کرد، و فکر نمیکنید که استفاده از این عملگر تاثیری در سرعت برنامه میگذاره (از لحاظ حجم انجام عملیات) ؟


در این مورد هر دو زبان il خروجی را بصورت 
"SELECT *\r\nFROM SomeSuchTable\r\nWHERE ID=\'WhatHaveYou\'\r\nORDER BY ThisAndThatField ASC "

خواهد ساخت یعنی هیچ فرقی نمی کنه!




> جناب linux، در مورد *Select و switch* تا حدودی حق با شماست ولی در نظر داشته باشید که در یک فرم خالی در بیسیک.نت، متد Form1_Load خروجی IL به شکل زیر داره:
> ....
> ....
> ....
> 
> خب، حالا در این مورد، از نظر شما بیسیک.نت چه کار اضافی انجام داده که حجم IL اش *اینقدر* از سی# بیشتره؟!
> نکته جالبی بود، ممنون.


در مورد کار اضافه ویبی در تولید il برای کدی که در بالا نوشتید در زیر کاملا توضیح خواهم داد
اما بعد
البته اکثر وقت ها حق با من بوده.
ببنید مشکل کار اینجاست که کد شما بی معنی هست و کد بی معنی هم مایه درد سر!
شما مقدرا A را صفر قرار دادید و بعد حالا در یک switch می خواهید در صورتی که مقدار A
مقادیر دیگر داشت دستورات دیگری انجام دهد.اگر من کامپایلر بودم این دستور شمارا خلاصه  می کردم به صورت زیر
A=0
B=9
چون A همیشه صفر هست و تنها این حالت اتفاق می افتد و همیشه هم B=9 هست به همین جهت کدی که شما نوشتید کلا بی معنی و سرکار گذاشتن کامپیوتر هست.
کامپایلر سی شارپ این خلاصه سازی را انجام می دهد ولی بدلیل اینکه شما در تعریف متغیر ها سبکی انتخاب کردید که برای ویبی معنی جدایی از سی شارپ دارد ویبی A را به عنوان یک object در نظر می گیرد نه یک متغیر از نوع byte و این کارهای اضافی را انجام می دهد یک object را با یکسری عدد مقایسه کند و دیگر نمی تواند آن خلاصه سازی را که کامپایلر سی شارپ انجام داده انجام دهد کافی است تا شما از این روش برای تعین متغیر استفاده کنید

Dim A As Byte = 0, B As Byte
Select Case A
Case 0, 1, 2
B = 9
Case 3
B = 10
End Select

بعد از اینکار می توانید il برنامه ویبی را ببنید خیلی شبیه il سی شارپ هست. 
در پیگری این مورد  اگر این دستورات را داخل یک تابع تعریف کنید کهA  را به عنوان ورودی بگیرد و یک خروجی تحویل دهد چون امکان روی دادن تمام حالات برای مقدار a هست دیگر خلاصه سازی هم انجام نمی شود

حالا این کار را انجام بدهید
کد را به صورت زیر اصلاح کنید

PublicFunction test2(ByVal A AsInteger, ByVal B AsInteger) AsInteger
SelectCase A
Case 0, 1, 2
B = 9
Case 3
B = 10
EndSelect
Return b
EndFunction

و برای سی شارپ

publicbyte tst2(byte A, byte B) 
 
{
 
switch (A)
{
case 0:
case 1:
case 2:
B = 9;
break;
case 3:
B = 10;
break;
}
return B;
}
 

حالا برید و خروجی il هر دو کد را ببنید
il ویبی

.method public instance int32 test2(int32 A, int32 B) cil managed
{
.maxstack 1
.locals init (
[0] int32 test2,
[1] int32 VB$t_i4$L0)
L_0000: ldarg.1 
L_0001: switch (L_0018, L_0018, L_0018, L_001e)
L_0016: br.s L_0022
L_0018: ldc.i4.s 9
L_001a: starg.s B
L_001c: br.s L_0022
L_001e: ldc.i4.s 10
L_0020: starg.s B
L_0022: ldarg.2 
L_0023: ret 
}

il سی شارپ

.method public hidebysig instance uint8 tst2(uint8 A, uint8 B) cil managed
{
.maxstack 1
.locals init (
[0] uint8 CS$0$0000)
L_0000: ldarg.1 
L_0001: stloc.0 
L_0002: ldloc.0 
L_0003: switch (L_001a, L_001a, L_001a, L_0020)
L_0018: br.s L_0024
L_001a: ldc.i4.s 9
L_001c: starg.s B
L_001e: br.s L_0024
L_0020: ldc.i4.s 10
L_0022: starg.s B
L_0024: ldarg.2 
L_0025: ret 
}
 

خروجی های مختلف ilبرای یک کد که در هر دو زبان به نظر می رسه که شبیه هم هستند ممکن هست بدلیل اشتباه ما در تبدیل یک کد از زبانی به زبان دیگر باشد.

----------


## linux

برای تعریف متغیر های هم نام ولی با تفاوت حروف بزرگ و کوچک از [] می توانید استفاده کنید

Dim [point] As Point = New Point(10, 10)

----------


## __H2__

سلام
اجازه دهید من هم به برخی از این ابهامات مسخره پاسخ دهم.



> --- سی# : به مقررات کدنویسی پای بند است و مثلا باید تمام casting ها قید بشه، در غیر اینصورت برنامه کامپایل نخواهد شد. 
> --- بیسیک.نت : زیاد به مقررات کدنویسی پایبند نیست و مثلا لازم نیست همه casting ها قید بشه.
> 1) عیب : کد نویسی بصورت غیر اصولی (کثیف).
> 2) مزیت : سرعت در عملیات کد نویسی.


دستور پیش پردازنده Option Strict On برای همین منظور است و من خودم به شخصه در تنظیمان خود محیط VS آن را به ON تنظیم کرده ام، با اینکار VB هم به همان اندازه #C لجباز میشود و کوچکترین تبدیلات را هم انجام نمیدهد و باید تبدیلات را صراحتاً انجام داد.




> --- سی# : در ساختار Error Catching به گونه ایست که ارورهای بیشتری رو Catch میکنه، مثل متغیرهای مقدار اولیه نگرفته یا کد مرده و ...
> --- بیسیک.نت : تا جائی که اطلاع دارم، نداره.


اصلاً و ابداً !!!! VB اینها را به دقت عنوان Warning گزارش (و تازه بعد از پایان یافتن تایپ خط جاری اینکار را میکند و مثل #C آنرا به زمان کامپایل نمی اندازد) و میتوان در تنظیمات پروژه اینها را به عنوان Error تنظیم کرد که در این حالت از کامپایل هم جلوگیری میشود ولی درستش همان Warning است.




> در سی شارپ دات نت هنگام ساخت پروژه لیست خطا ها و اخطار ها رو نشون میده. اما در وی بی دات نت بعد از دکمه Enter هر خط غلط یابی میشه!! نظر من نیست فناوری ه مایکروسافته!!


دقیقاً ! اینکار VB از آن کارهای بشدت مورد علاقه من است و Warning ها و Error ها را به زمان کامپایل نمی اندازد و میتوانید به محض کد نویسی هر خط از لیست دقیق آنها مطلع شوید و بفمهید که خط تایپی شما موجب شده فلان متغییر مرده شود و دیگر در هیچ جای کد استفاده نشود و...

تعریف متغیر هم با کلاسس هم کلاَ مانعی ندارد. Dim Point As System.Drawing.Point

----------


## حامد مصافی

> دستور پیش پردازنده Option Strict On برای همین منظور است و من خودم به شخصه در تنظیمان خود محیط VS آن را به ON تنظیم کرده ام، با اینکار VB هم به همان اندازه #C لجباز میشود و کوچکترین تبدیلات را هم انجام نمیدهد و باید تبدیلات را صراحتاً انجام داد.


Stricit???????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!





> منظورم این بود :
>  	کد:
>  	Point point = new Point(0,0);


حالا وی بی حساس به شکل حروف نیست. برنامه نویسان این زبان چیز زیادی از دست دادند؟؟
نامگذاری به این شکل درسته؟؟ چقدر از این روش استفاده می کنید؟؟؟
چرا مایکروسافت این روش مبهم نامگذاری رو مذمت کرده؟؟





> منظور گرفتن خطا پس از Enter یا ... نیست. منظور کنترل Catch برای متغیرهائیست که هنوز مقداری نگرفته اند یا ...


مثالی در این رابطه بزن که در وی بی عملی نباشه!






> لطفا بیشتر توضیح بدید...


هر دو زبان در مواردی کار هایی رو ساده تر از دیگر انجام میدن. مثل فضای نامی My که از قابلیت های تمرکز یافته در اون (که بر مبنای کلاس ها و متد های چهار چوب دات نت بنا شدند) اطلاع دارید

----------


## PC2st

دوست عزیز *linux*، در مورد استفاده از & vbCrLf و اون دستور Select Case، رفع ابهام شد... ممنونم :) در ضمن پست مربوط به مقایسه هم ویرایش کردم.







> برای تعریف متغیر های هم نام ولی با تفاوت حروف بزرگ و کوچک از [] می توانید استفاده کنید


نکته جالبی بود... بعد برای استفاده از شئ ایجاد شده، باید به شکل زیر استفاده کرد ؟ :

point.X

حالا اگر من بخوام به کلاس اصلی یعنی Point دسترسی داشته باشم باید بنویسم System.Drawing.Point ؟ به نظر شما استفاده از [] کدنویسی رو سخت نمیکنه؟ یا روش بهتری برای دسترسی به Point هست؟!







> مثالی در این رابطه بزن که در وی بی عملی نباشه!


جناب *BlackDal* و *__H2__* عزیز، اون مورد Catch رو هم تصحیح کردم... (پست 45 ویرایش شد)
این مورد Catch رو از یک متن انگلیسی خونده بودم، حالا مثل اینکه متن اون مطلب قدیمی یا نادرست بوده!







> حالا وی بی حساس به شکل حروف نیست. برنامه نویسان این زبان چیز زیادی از دست دادند؟؟


این مورد یک عیب و یک مزیت داره... حالا نمیدونم عیبش بیشتره یا مزیتش!







> دستور پیش پردازنده Option Strict On برای همین منظور است و من خودم به شخصه در تنظیمان خود محیط VS آن را به ON تنظیم کرده ام، با اینکار VB هم به همان اندازه #C لجباز میشود و کوچکترین تبدیلات را هم انجام نمیدهد و باید تبدیلات را صراحتاً انجام داد.


این مورد رو که از جلوی بیسیک.نت برداشته بودم :) ولی هنوز جلوی سی# مونده!
برای اینکه مشکلی پیش نیاد، اون رو از جلوی سی# هم بر میدارم :)




برای اینکه مشکلی برای بعد پیش نیاد ( و مباحث زیاد تو در تو نشه ) همون مطلب پست شماره *45* ( از همین تاپیک ) که مربوط به مقایسه بین سی# و بیسیک.نت بود، بر اساس توضیحات دوستان، ویرایش شد. لطفا یک نگاه مجدد به همون پست بندازید...


با تشکر فراوان از دوستان...
اگر مورد دیگه ای بود، خوشحال میشم عنوان کنید :) ( چه در باب عیب و چه مزیت ! )

----------


## PC2st

> مثل فضای نامی My


پس از اضافه کردن Reference، تا حدود زیادی از کلاسهای فضای نام My قابل استفاده در سی# هست... مثلا :

Microsoft.VisualBasic.Devices.Computer my = new Computer();
my.FileSystem.CopyDirectory( @"C:\A", @"D:\A" );

----------


## linux

[quote=PC2st.ir;338471]دوست عزیز *linux*، در مورد استفاده از & vbCrLf و اون دستور Select Case، رفع ابهام شد... ممنونم :) در ضمن پست مربوط به مقایسه هم ویرایش کردم.

نکته جالبی بود... بعد برای استفاده از شئ ایجاد شده، باید به شکل زیر استفاده کرد ؟ :

point.X

حالا اگر من بخوام به کلاس اصلی یعنی Point دسترسی داشته باشم باید بنویسم System.Drawing.Point ؟ به نظر شما استفاده از [] کدنویسی رو سخت نمیکنه؟ یا روش بهتری برای دسترسی به Point هست؟!
quote]
باید بعد از تعریف بصورت [point].x استفاده کنید. قطعا سخت تر می شه ولی من هیچ وقت از این روش استفاده نخواهم کرد
در کلاس های برای فیلد ها از _ قبل از اسم و برای پروپرتی بدون _ استفاده می کنم
در داخل برنامه هام هیچ وقت نام یک متغیر را همسان نام کلاس نمی گیرم
چیز که من استفاده خواهد کرد شبیه این خواهد بود
dim pntStart as point

----------


## benyblack

مدت ها بود که به این فروم سر نزده بودم و حالا که حجم پست ها و مطالب پر بارش رو می بینم خیلی خوشالم!
این اولین پست من در این جاست و می خوام مطلبی رو که اینجا مطرح شده از یه زاویه دیگه ببینم و خوشحال میشم نظر دوستان رو داشته باشم.
تو این چند سالی که مشغول کار با دات نت بودم با شاگرد ها و همکارای زیادی کارکردم و پروژه های زیادی رو مدیریت کردم. از پروژه های 1000 خطی ساده گرفته تا برنامه های بسیار سنگین. مطلبی که در مورد vb و #c نظرم رو جلب کرد این بود :  زمان اجرای پروژه!
حالا این یعنی چه؟!
افراد برای یادگیری #C وفت بیشتری صرف می کنن
کد نویس های #C زمان بیشتری رو صرف کد نویسی می کنن
و از همه مهمتر و قابل توجه تر زمانی هست که افراد صرف دیباگ می کنن که حداقل در مورد کارهای من خیلی مشکل ساز بود
البته برای اینکه ذهن دوستان روشن بشه باید بگم که روش کار و کد نویسی تمام این دوستان منطبق بر مسایل اجرایی OOP بود و زمان هیچ ربطی به کد نویسی اسپاگتی نداشت.
به هر حال این فقط مشاهدات شخصی من بود و خیلی دلایل مستندی برای این مطالب در اختیار ندارم ولی مطمئنا هر وقت قصد استخدام برنامه نویس داشته باشم حتما یک VB کار برام ارجحیت داره.

----------


## PC2st

در مورد کد زیر در بیسیک.نت:

Dim A = 0, B As Byte

در مورد کد بالا، همونطور که من یک اشتباه رو انجام دادم، بدون اینکه کامپایلر بیسیک.نت به من *اخطار*ی بده، شی رو از نوع object تعریف کرد! در صورتی که در سی# باید نوع object به صراحت ذکر بشه و برنامه نویس از این موضوع مطلع بشه تا اگر سهوا کار اشتباهی در سی#، انجام شده، به سرعت پی گیری بشه تا تاثیر نامطلوبی روی برنامه نگذاره.

به نظر شما دوستان، این مورد یک مزیت است یا یک عیب؟

----------


## PC2st

> مدت ها بود که به این فروم سر نزده بودم و حالا که حجم پست ها و مطالب پر بارش رو می بینم خیلی خوشالم!
> این اولین پست من در این جاست و می خوام مطلبی رو که اینجا مطرح شده از یه زاویه دیگه ببینم و خوشحال میشم نظر دوستان رو داشته باشم.
> تو این چند سالی که مشغول کار با دات نت بودم با شاگرد ها و همکارای زیادی کارکردم و پروژه های زیادی رو مدیریت کردم. از پروژه های 1000 خطی ساده گرفته تا برنامه های بسیار سنگین. مطلبی که در مورد vb و #c نظرم رو جلب کرد این بود : زمان اجرای پروژه!
> حالا این یعنی چه؟!
> افراد برای یادگیری #C وفت بیشتری صرف می کنن
> کد نویس های #C زمان بیشتری رو صرف کد نویسی می کنن
> و از همه مهمتر و قابل توجه تر زمانی هست که افراد صرف دیباگ می کنن که حداقل در مورد کارهای من خیلی مشکل ساز بود
> البته برای اینکه ذهن دوستان روشن بشه باید بگم که روش کار و کد نویسی تمام این دوستان منطبق بر مسایل اجرایی OOP بود و زمان هیچ ربطی به کد نویسی اسپاگتی نداشت.
> به هر حال این فقط مشاهدات شخصی من بود و خیلی دلایل مستندی برای این مطالب در اختیار ندارم ولی مطمئنا هر وقت قصد استخدام برنامه نویس داشته باشم حتما یک VB کار برام ارجحیت داره.


فکر کنم بد نباشه که بدونید :

کتابخانه *NET Framework.* رو با *سی#* نوشتند...
Runtime های اون رو هم با سی++ نوشتند...


منبع : در گوگل تمام عبارت "NET Framework written in C#‎" رو سرچ کنید :)

----------


## Alireza_Salehi

> در مورد کد زیر در بیسیک.نت:
> 
> Dim A = 0, B As Byte
> 
> در مورد کد بالا، همونطور که من یک اشتباه رو انجام دادم، بدون اینکه کامپایلر بیسیک.نت به من *اخطار*ی بده، شی رو از نوع object تعریف کرد! در صورتی که در سی# باید نوع object به صراحت ذکر بشه و برنامه نویس از این موضوع مطلع بشه تا اگر سهوا کار اشتباهی در سی#، انجام شده، به سرعت پی گیری بشه تا تاثیر نامطلوبی روی برنامه نگذاره.
> 
> به نظر شما دوستان، این مورد یک مزیت است یا یک عیب؟


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

مثلا در خیلی از موارد در ++C باید برنامه نویس تاثیر واقعی کد رو بدونه چون چیزی که میبینه دقیقا چیزی نیست که انتظار داره ، حالا باید بگیم این یک نقصه ؟




> فکر کنم بد نباشه که بدونید :
> کتابخانه *NET Framework.* رو با *سی#* نوشتند...
> Runtime های اون رو هم با سی++ نوشتند...


اینم هیچی رو ثابت نمیکنه!

به نظر من بیخودی بحث رو طولانی نکنید ، چون به هیچ جایی نمیرسید ، در سایت های غیر ایرانی هم که بعضی برنامه نویسان حرفه ای مطلب نوشتن هیچ کدام هیچ یک از این دو زبان رو نفی نکرده ، چون هر کدوم کاربرد خودش رو داره!

در این که سی شارپ برنامه نویس رو مجبور میکنه حتما بعضی کارها رو بفهمه و بعد انجام بده شکی نیست ، کسانی که در برنامه نویسی سرشون به تنشون میارزه قبل از کد نویسی دانشی که پشت این کدها هست رو فهمیدن بعدش کد می نویسند بنابراین اگر با وی بی کد بنویسند حتما از خیلی از سی شارپ کارها کدهای مطمئن تر کاراتر و موثرتری خواهند نوشت!

----------


## PC2st

> اینم هیچی رو ثابت نمیکنه!


این مورد رو در جواب benyblack گفتم و ربطی به مقایسه نداشت، برای اطلاع رسانی بود که:
اگر ایشون VB.NET براش ارجحیت داره، از نظر مایکروسافت در اون مورد خاص (.NET Framework Library)، سی# ارجحیت دازه!






> این مورد که نقص حساب نمیشه ، ماهیت زبان بیسیک از ابتدا همین بوده!


درسته، قبول دارم...
نمیشه گفت که همش عیب هست یا مزیت...
تا حدودی عیب داره و تا حدودی هم مزیت...
وقتی عیب و مزیت گفته بشه، اون وقت ماهیت و کاربردشون و غیره، مشخص میشه.

که بنظرم، عیبش اینه که گفتم، یعنی :



> همونطور که من یک اشتباه رو انجام دادم، بدون اینکه کامپایلر بیسیک.نت به من *اخطار*ی بده، شی رو از نوع object تعریف کرد! در صورتی که در سی# باید نوع object به صراحت ذکر بشه و برنامه نویس از این موضوع مطلع بشه تا اگر سهوا کار اشتباهی در سی#، انجام شده، به سرعت پی گیری بشه تا تاثیر نامطلوبی روی برنامه نگذاره.


و فکر کنم شما مزیتش رو گفتید، یعنی :



> ماهیت زبان بیسیک از ابتدا همین بوده! اگر قرار باشه کلا این دو زبان برابر بشن دیگه این *راحتی* که در وی بی هست وجود نداره


 





> بنابراین اصلا لزومی نداره این دو تا دقیقا مثل هم بشن!


درسته، لزومی نداره مثل هم باشند و به قول شما اصلا ماهیتشون فرق میکنه، که با پی گیری این بحث ها، میشه تفاوتشون رو پیدا کرد.
راستی بد نیست در مورد شباهتها هم بگیم :)






> بنابراین اگر با وی بی کد بنویسند *حتما از خیلی از سی شارپ کارها* کدهای مطمئن تر کاراتر و موثرتری خواهند نوشت!


فکر نمیکنم *حتما* اینطوری باشه... این نظر شماست و قابل احترامه :)

----------


## PC2st

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

----------


## حامد مصافی

> کتابخانه *NET Framework.* رو با *سی#* نوشتند...


چه ربطی به سی شارپ دات نت داره؟؟؟؟
کتابخانه های دات نت رو نمیشه با زبان هایی که از همون کتابخانه ها استفاده می کنند نوشت!






> منبع : در گوگل تمام عبارت "NET Framework written in C#‎" رو سرچ کنید :)


زحمتشو خودت بکش. یه لینک هم به ما بده!

----------


## linux

> در مورد کد زیر در بیسیک.نت:
> 
> Dim A = 0, B As Byte
> 
> در مورد کد بالا، همونطور که من یک اشتباه رو انجام دادم، بدون اینکه کامپایلر بیسیک.نت به من *اخطار*ی بده، شی رو از نوع object تعریف کرد! در صورتی که در سی# باید نوع object به صراحت ذکر بشه و برنامه نویس از این موضوع مطلع بشه تا اگر سهوا کار اشتباهی در سی#، انجام شده، به سرعت پی گیری بشه تا تاثیر نامطلوبی روی برنامه نگذاره.
> به نظر شما دوستان، این مورد یک مزیت است یا یک عیب؟


تا وقتی شما از قسمت myproject ---> compiler تنظیمات را تغیر ندهید ویژوال بیسیک این خطا ها را چشم پوشی می کند این سه قسمت را به warrning تغییر بدهید ویژوال بیسیک هم خطا خواهد گرفت



مشکل اینجاست که شما این را تاحالا نمی دانستید.
برای دستور dim اینجوری باید عمل کنید

Dim a AsInteger = 0, b AsLong, d AsDate = DateTime.Now, e AsString = "Start", o AsObject

یعنی در یک خط استفاده از دستور dim شما همه جور متغییری می توانید تعریف کنید.
بر خلاف سی شارپ که وقتی اعلام کردید فقط از همان نوع متغیر ساخته میشه
بعضی وقت ها مشکل از اینکه ما درست بلد نیستیم

----------


## PC2st

> زحمتشو خودت بکش. یه لینک هم به ما بده!


1. http://www.google.com/search?num=50&...ten+in+C%23%22
2. http://www.ureader.com/message/1773149.aspx

----------


## PC2st

> برای دستور dim اینجوری باید عمل کنید


بعد از اون اشتباه قبلی، قهمیدم که باید چطور استفاده بشه :)






> این سه قسمت را به warrning تغییر بدهید ویژوال بیسیک هم خطا خواهد گرفت


هنوز این مورد رو در قسمت مقایسه ها قرار نداده بودم و با توجه به این نکته، پس لازم نیست این مورد اضافه بشه :) از توضیج ممنونم...






> بعضی وقت ها مشکل از اینکه ما درست بلد نیستیم


اینجور بحث هاست که باعث میشه سوء تفاهم ها و ندانستنی ها، برطرف بشه :) تا بحث به یک نتیجه شفاف برسه!
این مواردی که شما در این پست یا پستهای قبلی گفتید، در بیسیک.نت *2003* هم وجود داشت ؟

----------


## linux

من با بیسیک 2003 کار نکردم

----------


## __H2__

سلام
آقایان، علما، فضلا .... !!! این بحث داره زیادی بیهوده میشه! در همین سایت در تاپیکی دیگر نیز این بحث ادامه داشت و آخر هم به نتیجه مشخصی نرسید. همان طور که کاربر arsp_2004 هم اشاره کردند، هیچ فایده ای ندارد!
مطمئناً به جای نمیرسید، حالا که دوستان از هر دو طرف هستند دیگر فایده ای ندارد! هر طرف ابهامی را مطرح کند (که به نظر من ناشی از بی اطلاعای از امکانات زبان مقابل است) فوراً دوستان مثال نقضش را می آورند.

به قول کاربر BlackDal تفاوت هایی وجود دارد ولی برتری نه! (گرچه که همچنان به نظر من تفاوت فاهشی وجود به جز سینتکس خاص هر زبان وجود ندارد!)

سند انتهای پست 42 هم روشن است.

البته ما همچنان میمانیم و به ابهامات احتمالی پاسخ میدهیم ولی چه خوب که دیگر ابهامی مطرح نشود!!!

موفق و پیروز باشید.

----------


## حامد مصافی

> 1. http://www.google.com/search?num=50&...ten+in+C%23%22
> 2. http://www.ureader.com/message/1773149.aspx







> چه ربطی به سی شارپ دات نت داره؟؟؟؟


اگه متوجه نشدی به جای #C بنویس C#‎.NET

----------


## Keramatifar

بابا چرا انقدر با هم دعوا میکنید ...
نکته جالب اینکه نویسنده Delphi (الکساندر هلزبرگ) که سالها کارمند بورلند بود توسط مایکروسافت برای خلق C#‎ از بورلند خریده شد.
الکس جون هم برای خلق C#‎ قدرت C و سادگی Delphi و نه Basic رو در نظر گرفت، چون سادگی بیش از حد VB باعث ضعف هایی هم شده، بنابراین اون بیشتر Delphi رو الگوی ساخت C#‎ قرار داد.

----------


## PC2st

> اگه متوجه نشدی به جای #C بنویس C#‎.NET


برای جستجو در گوگل، هر چه جستجو محدودتر بشه، احتمال یافتن مطالب مورد نظر هم کمتر میشه، حالا من دات نت اضافه کنم، دیگه محدودیت خیلی رفته بالا !!! چون اگر خوب دقت کرده باشید، کمتر جائی می بینید که نوشته بشه C#‎.NET و معمولا واژه C#‎ یا CSharp به کار برده میشه... دلیل اینکه مینویسند VB.NET بخاطر اینه که بیسیک قبل و بعد از دات نت، ماهیت های متفاوتی دارند :) ( تفاوتی مثل بادام زمینی و بادام هندی! )


دوست عزیز، تا اونجائی که فهمیدم، runtime هاش با سی++ نوشته شده و کلاسهاش با سی# ... یعنی اینکه به کمک زبان سی# و Runtime ها، *کتابخانه دات نت* نوشته شده ...
سی# یک زبان هست و لازم نیست که حتما از *کتابخانه* دات نت استفاده کنه، با توجه به اینکه *دات نت* فقط به همون کتابخانه محدود نمیشه و متشکل از قسمتهای دیگری ( از جمله Runtime ) هم هست :)


البته ناراحت نباشید :) یک جائی خونده بودم که کلاسهای داخل فضای نام *My* در بیسیک.نت، به کمک خود بیسیک.نت نوشته شده ! و این به دلیل سازگاری بیشتر با بیسیک.نت و استفاده از متدهائی با پارامترهای اختیاری است. ( منبعی براش ندارم، مقبولیتش با خودتون! )

----------


## PC2st

> این بحث داره زیادی بیهوده میشه!


به نظرم برعکس! بیهوده نمیشه...


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






> هر طرف ابهامی را مطرح کند (که به نظر من ناشی از بی اطلاعای از امکانات زبان مقابل است) فوراً دوستان مثال نقضش را می آورند.


بد نیست یک توضیح هم در رابطه با این بگم تا سوء تفاهم ها از بین بره :
اولین بار که لیست مربوط به تفاوتها رو نوشته بودم، همش رو از یک سایت به زبان انگلیسی برداشته بودم، مواردی مثل *استفاده از +=* برای شکستن خطوط در بیسیک.نت و *نداشتن XML Comments* ( که جناب linux توضیحات مربوطه رو اعلام داشتند ) و همچنین Catch* کردن Error* های بیشتر در سی#، همه اینها رو از یک سایت *انگلیسی* برداشته بودم که *گویا به احتمال زیاد* اون مطالب *قدیمی* بوده و برای مقایسه با VB.NET 2003 بکار رفته که به تبع، هم اکنون VB.NET 2005 موجود است که اون موارد رو اصلاح کرده است.

پس این از این ! اما برای مطلبی که در مورد Select Case گفته شد، قبول دارم یک اشتباه شخصی بخاطر نحوه کد نویسی بود ( به همین خاطر پوزش من رو پذیرا باشید )... که در ادامه آن و گفتگو با linux مشخص شد که مورد اشتباه در نحوه کد نویسی بوده... بعد از اون به ذهنم رسید که اگر این چنین است، پس یعنی VB.NET به این نوع اشتباهات پای بند نیست ؟! پس این مورد رو در همین تاپیک نوشتم تا ببینم جوابش چیه ! که با جواب جناب linux متوجه شدم، میشه به کمک تنظیمات Compile مشکل رو حل کرد.
پس با توجه به این مطالب، سعی کردم تا حالا ابهامات نباشه و از یک منبع بخصوص باشه، به جز همون Select Case که در ادامه اون، مطلب دیگری عنوان شد.


اگر هم ابهاماتی بود، برطرف شده که برطرف شدن اینها به شفاف سازی و در آخر هم یک *نتیجه شفاف* و شاید *نه* خیلی دقیق (!) می انجامه.


در هر صورت سعی میکنم که لیست تفاوتها و شباهت نوشته بشه ( حالا یا من مینویسم یا شما، فرقی نمیکنه ) تا جائی برای کل کل و ... نباشه. در هر صورت، فعلا این لیست در پست شماره 45 از همین تاپیک قرار داره و میشه بهش مراجعه کرد. ( لیست تفاوتها هم آپدیت شده )

----------


## حامد مصافی

> برای جستجو در گوگل، هر چه جستجو محدودتر بشه، احتمال یافتن مطالب مورد نظر هم کمتر میشه، حالا من دات نت اضافه کنم، دیگه محدودیت خیلی رفته بالا !!! چون اگر خوب دقت کرده باشید، کمتر جائی می بینید که نوشته بشه C#‎.NET و معمولا واژه C#‎ یا CSharp به کار برده میشه... دلیل اینکه مینویسند VB.NET بخاطر اینه که بیسیک قبل و بعد از دات نت، ماهیت های متفاوتی دارند :) ( تفاوتی مثل بادام زمینی و بادام هندی! )


دقیقاً، جالبه بدونید تقاوت #C و C#‎.NET هم به همین اندازست!





> بابا چرا انقدر با هم دعوا میکنید ...
> نکته جالب اینکه نویسنده Delphi (الکساندر هلزبرگ) که سالها کارمند بورلند بود توسط مایکروسافت برای خلق C#‎ از بورلند خریده شد.
> الکس جون هم برای خلق C#‎ قدرت C و سادگی Delphi و نه Basic رو در نظر گرفت، چون سادگی بیش از حد VB باعث ضعف هایی هم شده، بنابراین اون بیشتر Delphi رو الگوی ساخت C#‎ قرار داد.


اندرو هلزبرگ (Anders Hejlsberg) به منظور تدوین چهارچوبی که به نام دات نت می شناسید به مایکروسافت رفت، نه فقط سی شارپ!!!

----------


## PC2st

> دقیقاً، جالبه بدونید تقاوت #C و C#‎.NET هم به همین اندازست!


فکر نمیکنم سنتکس برنامه نویسی در سی# با C#‎.NET فرقی داشته باشه !!! :)
به همین خاطر، معمولا در بحثها و مطالب میگن سی# نه C#‎.NET

----------


## PC2st

میخواستم ببینم که مشابه کلمات checked و unchecked در بیسیک.نت چیه؟
نتونستم چیزی پیدا کنم، این مورد برای کنترل روی OverflowException هست.

----------


## حامد مصافی

> فکر نمیکنم سنتکس برنامه نویسی در سی# با C#‎.NET فرقی داشته باشه !!! :)
> به همین خاطر، معمولا در بحثها و مطالب میگن سی# نه C#‎.NET


تفاوت سینتکس #C و C#‎.NET به اندازه تفاوت VB و VB.NET است. این دو یک زبان نیستند!!!من نمی دونم شما چند تا مطلب سنگین خوندید که به جای #c نوشته بود C#‎.NET (با کمال احترام البته)



> اولین بار که لیست مربوط به تفاوتها رو نوشته بودم، همش رو از یک سایت به زبان انگلیسی برداشته بودم، مواردی مثل استفاده از += برای شکستن خطوط در بیسیک.نت و نداشتن XML Comments ( که جناب linux توضیحات مربوطه رو اعلام داشتند ) و همچنین Catch کردن Error های بیشتر در سی#، همه اینها رو از یک سایت انگلیسی برداشته بودم که گویا به احتمال زیاد اون مطالب قدیمی بوده و برای مقایسه با VB.NET 2003 بکار رفته که به تبع، هم اکنون VB.NET 2005 موجود است که اون موارد رو اصلاح کرده است.


لطف کن و فقط مطالب مستدلی رو که ناشی از اطلاعات خودته اینجا ذکر کن، نه نقل قول

----------


## PC2st

> تفاوت سینتکس #C و C#‎.NET به اندازه تفاوت VB و VB.NET است. این دو یک زبان نیستند!!!


میشه تفاوتشون رو ذکر کنید؟




> من نمی دونم شما چند تا مطلب سنگین خوندید که به جای #c نوشته بود C#‎.NET (با کمال احترام البته)


مطالبی که مربوط به ویژوال سی# 2005 باشه :)

----------


## PC2st

برای اینکه بیشتر سر این موضوع بحث نکنیم، مطلب زیر رو از MSDN گرفتم :
Why C#‎ and Visual Basic .NET? 
Why, if .NET supports 20 or so languages, will all of Dr. GUI's columns about .NET use only C#‎ and Visual Basic .NET? Well, at first the beta versions of the Dr. GUI .NET columns were using only C#‎. At the time the good doctor started the column, C#‎ was the obvious choice. Here's why: *Much of the .NET Framework is written in C#‎*, so most of the early examples were also in C#‎. It just seemed like the obvious way to go at the time. (Don't forget that Dr. GUI is a C++‎ kinda guy, too.) 
But nowadays, Visual Basic .NET is almost every bit as powerful as C#‎ (there are some features in each that aren't in the other), so it's an equally good choice for .NET programming—and today it's obvious that Dr. GUI .NET should use both languages. Thus, the good doctor (with the help of Duncan Mackenzie, author of Coding4Fun—thanks, Duncan!) has both C#‎ and Visual Basic .NET samples in the columns.

لینک منبع و البته توضیحات بیشتر :
http://msdn2.microsoft.com/en-us/library/aa302304.aspx

به اون جمله قرمز و پر رنگ شده توجه کنید. برداشت شما از مطلب فوق چیه؟
توجه شما رو به این نکته جلب میکنم که سی# *در کنار* بیسیک.نت اومده و یک مقایسه کوچولو صورت گرفته :)

----------


## __H2__

> بد نیست یک توضیح هم در رابطه با این بگم تا سوء تفاهم ها از بین بره :
> اولین بار که لیست مربوط به تفاوتها رو نوشته بودم، همش رو از یک سایت به زبان انگلیسی برداشته بودم، مواردی مثل *استفاده از +=* برای شکستن خطوط در بیسیک.نت ...  همه اینها رو از یک سایت *انگلیسی* برداشته بودم که *گویا به احتمال زیاد* اون مطالب *قدیمی* بوده و برای مقایسه با VB.NET 2003 بکار رفته که به تبع، هم اکنون VB.NET 2005 موجود است که اون موارد رو اصلاح کرده است.


سلام
همین مسئله اثبات میکنه که صرف خارجی بودن منبع دلیل بر موجه و بی نقص بودن آن نیست، چون این روش تا آنجایی که من یادم می آید وجود داشته و ربطی به VB2005 ندارد، یعنی نگارنده اصلی که خارجی هم بوده حتی اصول ابدایی Basic را هم بلد نبوده و باز به خودش اجازه همچین مقایسه ای داده!






> *Much of the .NET Framework is written in C#‎*


همانطور که دوستان هم گفتند، این به هیچ وجه اثبات قدرت نیست! کلاسهای فریم وروک را با هر کدام از زبان های تحت دات نت میتوان نوشت و در همه زبانهای دیگر استفاده کرد.

راستی من جدیداً کاری در #C انجام میدادم به دو مشکل برخوردم! شاید تاپیکی جدید میزدم بهتر بود! یکی شان طولانی است و حتماً باید تاپیکی در این مورد بزنم ولی یک مورد ساده است و شاید دوستان #C سریعاً جوابش را بدهند (ولبته بی ربط به تاپیک فوق هم نیست!).
معادل کلمه کلیدی Me و MyBase را در #C بلدم، ولی معادل MyClass چیست ؟؟؟؟؟؟؟

----------


## PC2st

> معادل کلمه کلیدی Me و MyBase را در #C بلدم، ولی معادل MyClass چیست ؟؟؟؟؟؟؟


کد زیر رو در بیسیک.نت میشه به کمک کلمه کلیدی MyClass اجرا کرد تا با override شدن متد MyMethod، باز هم همون MyMethod کلاس والد، از طریق متد DoWork اجرا بشه.

Public Class ClassA
    Public Overridable Sub MyMethod()
        MessageBox.Show( "Base" )
    End Sub
    Public Sub DoWork()
        MyClass.MyMethod()
    End Sub
End Class
Public Class ClassB : Inherits ClassA
    Public Overrides Sub MyMethod()
        MessageBox.Show( "child" )
    End Sub
End Class


در سی# هم میتونیم متد MyMethod رو بصورت virtual تعریف نکنیم تا override نشه... دقیقا مثل همون کد بیسیک.نت عمل میکنه، بدون کوچکترین تفاوتی! اگر شک داشتین، کد IL اش رو مرور کنین.

public class ClassA
{
    public void MyMethod()
    {
        MessageBox.Show( "Base" );
    }
    public void DoWork()
    {
        this.MyMethod();
    }
}
public class ClassB : ClassA
{
    public void MyMethod()
    {
        MessageBox.Show( "Child" );
    }
}


با صدا زدن متد DoWork از شئ ایجاد شده از کلاس ClassB، خواهیم دید که هر دو کد یک نتیجه رو پس خواهند داد و متد MyMethod از کلاس ClassB ( که override هم شده )، صدا زده نمیشود.

پس تفاوتشون فقط به وجود یک کلمه *اضافی* به نام MyClass برمیگرده!

از دوستان کسی جواب اون سوال کلمات کلیدی checked و unchecked رو نداد! پس به نظرم چنین چیزی در بیسیک.نت وجود *نداره*...

----------


## __H2__

سلام
دوست عزیز این که نشد راه حل!!!!!!!!!!!!!!!!!!
فقدان کلمه کلیدی MyClass چیزی در حد فقدان base است. این یک جنبه قدرتمند در پیاده سازی های OOP و قدرت در پیاده سازی های وراثتی است.
حسن MyClass در آن است که با وجودی که متد قابل Override است (میتوان /ان را در مشتقات باز تعریف کرد.) میتواند در کلاسس جاری Override را در نظر نگیرد. حتماً باید معادلی در #C داشته باشد!؟!؟!؟! قابلیت MyClass یک قابلیت بی نظیر در طراحی های قدرتمند OOP است و با چیزهای درپیتی مثل With و... قابل قیاس هم نیست.
مثل این است که بگوییم (زبانم لال) #C کلمه override را ندارد، و درز جواب بگوییم خوب نیازی نیست هیچ متدی را override نمیکنیم !!!!!!!!!!!!!!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟؟؟؟  ؟؟؟؟؟

راستی برای مشکل دوم هم در #C تاپیکی زدم، دوستان نظری بیاندازند!

----------


## PC2st

> فقدان کلمه کلیدی MyClass چیزی در حد فقدان base است. این یک جنبه قدرتمند در پیاده سازی های OOP و قدرت در پیاده سازی های وراثتی است.


دیگه چه خبر!؟...  :)  بابا این قدر مزیت بزرگی هم *نیست*!!!





> مثل این است که بگوییم (زبانم لال) #C کلمه override را ندارد، و درز جواب بگوییم خوب نیازی نیست هیچ متدی را override نمیکنیم !!!!!!!!!!!!!!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟؟؟؟  ؟؟؟؟؟


آخرش بیسیک.نت کار خودش رو کرد!  :)

کلی فکر کردم تا بتونم *انواع پیاده سازی* کلاسها رو به کمک همین MyClass در بیسیک.نت پیدا کنم.
در نهایت به یک نتیجه ای رسیدم که:
واقعا لازم نیست که چنین موردی ( MyClass ) وجود داشته باشه!
چون راه حل های *بهتری* به جای استفاده از MyClass، وجود داره.

بهر حال نمیشه زیرش زد! این مورد در بیسیک.نت هست و در سی# نیست! :)
به زودی این مورد و دیگر موارد رو بصورت خیلی مرتب، بصورت یک مقایسه در کنار هم میگذارم ( بدون گفتن عیب و مزیت! و فقط توضیح در رابطه با اونها! )

----------


## __H2__

سلام علیکم به برادران ارجمند!



> در نهایت به یک نتیجه ای رسیدم که:
> واقعا لازم نیست که چنین موردی ( MyClass ) وجود داشته باشه!
> چون راه حل های *بهتری* به جای استفاده از MyClass، وجود داره.


دست شما درد نکنه! لطف کردید! یکی از کلمات کلیدی اصلی VB برای پیاده سازی های OOP به همین راحتی کشک شد!!!!!!!!!




> بهر حال نمیشه زیرش زد! این مورد در بیسیک.نت هست و در سی# نیست! :)


من همچنان امیدوار به راه حلی در #C هستم، چون قبول فقدان آن در #C برایم کمی سخت است.

----------


## حامد مصافی

> توجه شما رو به این نکته جلب میکنم که سی# *در کنار* بیسیک.نت اومده و یک مقایسه کوچولو صورت گرفته :)


هر چیزی که با یکی از زبان های دات نت مقایسه میشه الزاماً باید از سکوی دات نت باشه
در لینک زیر #C با C#‎.NET مقایسه شده. باید نتیجه بگیریم این دو یکی هستند؟؟
http://www.experts-exchange.com/Prog..._21827745.html


ظاهراً این بحث مسیر درستی پیدا نخواهد کرد
بهتره تمومش کنیم!

----------


## __H2__

> قابلیت Iterators چیزی بجز پشتیبانی راحت از رابطهای IEnumerator و IEnumerable نیست (و البته دوقولوهای Generic شان).
> 
> //C#‎ declare
> --------------------------------------------------
> public class SampleClass
> {
>    public static System.Collections.IEnumerable SampleIterator(int maxvalue)
>    {
>       for (int iCounter = 0; iCounter <= maxvalue; iCounter++)
> ...


سلام به دوستان عزیز!
گفتم هر دو کد فوق را که کاملاً یکسان عمل میکنند از نظر کد تولیدی IL مقایسه کنم.
نتیجه اش جالب بود! کد اول که با #C بود و خیلی هم کم بود و با قابلیت Iterators صورت گرفته بود با وجود کوچکی ظاهری شامل حدود 98 خط کد IL بود و کد دوم که بدون قابلیت Iterators  و به صورت عادی و با قوانین معمولی OOP در VB.Net بود و به ظاهر بیشتر هم بود شامل حدود 45 خط کد IL بود !!!!!! (تست فوق بدون در نظر گیری دستورات ForEach انجام شده وو میتوانید به راحتی آن را آزمایش کنید.)

----------


## PC2st

> در لینک زیر #C با C#‎.NET مقایسه شده. باید نتیجه بگیریم این دو یکی هستند؟؟


خیر... من نگفتم دقیقا یکی هستند، من گفتم معمولا بجای اینکه بگیم C#‎.NET بطور خلاصه میگیم #C... چون در واقع سی# یک زبان برنامه نویسی هست. فکر کنم این وسط داره سوء تفاهم میشه :)




> هر چیزی که با یکی از زبان های دات نت مقایسه میشه الزاماً باید از سکوی دات نت باشه


مطالبی مثل زیر در لینکی که دادی پیدا کردم :

C#‎ is a language. It is implemented using the .NET framework
There is difference between VB and VB.NET, but C#‎ *is a new language*, and it is *C#‎.net*

دقیقا نمیدونم منظورت چیه، در هرصورت این نوع سوال قبلا در همین فروم هم پرسیده شده...
اگر منظورت این بوده که منظور از سی#، همون سی# بیلدر محصول بورلند هست، فکر نمیکنم اینطور باشه و به کمک همون سی# مایکروسافت نوشته شده. نمیدونم که سی# مایکروسافت با بورلند چه قدر فرق داره ؟! شاید منظور شما همین بوده.

شایدم منظورتون این بوده که سی# دات نت با سی# خالی فرق داره، تا جائی که میدونم، سی# زبان برنامه نویسیه و سی#.نت اشاره میکنه که زبانی تحت دات نته و تا اونجائی که اطلاع دارم، سی# از *بدو تولد*، در دات نت بوجود اومد.





> ظاهراً این بحث مسیر درستی پیدا نخواهد کرد
> بهتره تمومش کنیم!


موافقم... منم اصرار ندارم.

----------


## PC2st

> دست شما درد نکنه! لطف کردید! یکی از کلمات کلیدی اصلی VB برای پیاده سازی های OOP به همین راحتی کشک شد!!!!!!!!!


کشک کشک هم نیست :)
از شوخی گذشته، استفاده از این کلمه در سی# کاربرد زیادی نداره ( حداقل برای من ) و استفاده نکردن از اون باعث میشه که در یک چهارچوب خاص، کد نویسی کنیم. صد البته یک مزیت برای بیسیک.نت حساب میشه ولی حداقل من (!) ضرورتی در استفاده از اون در سی# ندیدم با اینکه استفاده از اون، کد نویسی رو راحت تر میکنه.




> من همچنان امیدوار به راه حلی در #C هستم، چون قبول فقدان آن در #C برایم کمی سخت است.


من هم دنبال این گشتم که چطور اون رو در سی# استفاده کنم، تا جائی که به نتیجه رسیدم باید یک جوری از Attribute زیر برای متد استفاده کرد که البته نتیجه ای هم نگرفتم و واقعا نمیدونم چی به چیه ! ( خوردم به بم بست !!! )

[System.Runtime.CompilerServices.MethodImpl(System.  Runtime.CompilerServices.MethodImplOptions.Interna  lCall)]





> نتیجه اش جالب بود! کد اول که با #C بود و خیلی هم کم بود و با قابلیت Iterators صورت گرفته بود با وجود کوچکی ظاهری شامل حدود 98 خط کد IL بود و کد دوم که بدون قابلیت Iterators و به صورت عادی و با قوانین معمولی OOP در VB.Net بود و به ظاهر بیشتر هم بود شامل حدود 45 خط کد IL بود !!!!!!


iterators امکانات بیشتری به نسبت کلاسی داره که بهش اشاره کردید...

راستی، یک مورد !!
در بیسیک.نت، در داخل یک حلقه، نمیشه در اواسط کار، اجرای حلقه رو به ابتدای حلقه برد! درسته؟ ( همون کاری که کلمه *continue* در سی# میکنه )

----------


## Alireza_Salehi

> در بیسیک.نت، در داخل یک حلقه، نمیشه در اواسط کار، اجرای حلقه رو به ابتدای حلقه برد! درسته؟ ( همون کاری که کلمه *continue* در سی# میکنه )


کی گفته نمیشه!

اون مال قدیما بود که نمیشد.

----------


## PC2st

خب، مقایسه بین سی# و بیسیک.نت در زیر نوشتم برای آشنائی با تفاوتها...



مواردی از بیسیک.نت که در سی# نیست :

+ پارامترهای اختیاری - Optional Parameters
+ صدا زدن متد مجازی بصورت غیر مجازی - کلمه کلیدی MyClass
+ استفاده از کلمه کلیدی With...End With برای جلوگیری از کد نویسی تکراری
+ تغییر طول یک آرایه - کلمه کلیدی Redim
+ هر برنامه نویس، نحوه کامپایل کدش را میتواند به دلخواه تنظیم نماید.
+ استفاده از کلمه کلیدی When در کنترل Catch های یک استثنا
+ وجود کلمه Is در ساختار Select Case...End Select
+ در بیسیک.نت، پیاده سازی متد از یک اینترفیس، با نامی متفاوت برای آن امکان پذیر است در حالی که سی# چنین اجازه ای نخواهد داد!
+ تعریف متغیر از نوع استاتیک در بدنه یک متد



مواردی از سی# که در بیسیک.نت نیست :

+ استفاده از Unsafe Mode برای : استفاده از اشاره گرها ( Pointers ) ، جلوگیری کردن از GC برای انتقال یک متغیر در حافظه heap ( کلمه کلیدی fixed ) ، گرفتن اندازه یک داده ی از نوع مقداری ( کلمه کلیدی sizeof ) و اختصاص دادن فضا از حافظه stack به اشاره گری که به یک نوع مشخص اشاره دارد ( کلمه کلیدی stackalloc )
+ استفاده از کاراکتر گریز در رشته ها ( مثل سی++ ) - Escape Characters
+ مشخص کردن شیئ که بتواند بصورت نا هماهنگ تغییر پیدا کند - کلمه کلیدی volatile
+ پیاده سازی راحت برای کلاسهای مشتق شده از IEnumerable و انعطاف استفاده از Iterators
+ متدهای بدون نام که میتوانند در داخل یک متد دیگر پیاده سازی شده یا اینکه عضوی از یک کلاس نباشند.
+ Syntax آن دارای انعطاف قابل توجهی است.
+ کامنتهای طولانی را میتوان به سرعت در چند خط نوشت.
+ استفاده از عملگرهای checked و unchecked برای کنترل استثنای سرریز - Overflow exception control



دیگر مقایسه ها :

+ سی# به بزرگی و کوچکی حروف حساس است و بیسیک.نت حساس نیست.
+ سی# کدهای مختصری داره و از نمادها و کلمات خاص تشکیل شده در حالی که در بیسیک.نت کدها عموما به زبان گفتاری نزدیک تر هستند.
+ قاعدتا سی# زبانی است که پایان دستور در آن با ; مشخص میگردد پس میتوان هر دستور را به دلخواه در خطوط متفاوتی نوشت، این کار به کمک استفاده از _ ( یا & و _ برای رشته ها )، تا حدود زیادی در بیسیک.نت امکان پذیر است.
+ سی# برای دات نت فریم ورک نوشته شده و این در حالی هست که بیسیک.نت آماده شده تا بتونه در دات نت کار کنه.
+ در بیسیک.نت استفاده از فضای نام My امکان پذیره، که میشه در سی# هم تا حدود زیادی ازش استفاده کرد.
+ در بیسیک.نت با کمک کلمه کلیدی Handles راحت میشه متدی رو برای یک رویداد مشخص کرد، ولی در سی# باید حتما این متد توسط =+ در لیستی قرار بگیره که توسط رویداد فراخوانی میشوند.



موارد کوچک دیگری هم هست که بد نیست عنوان بشه، میتونه خیلی بیشتر از موارد زیر باشه :

+ در سی# از عملگرهای انتسابی بیتی =& و =^ یا =| میشه استفاده کرد.
+ در سی# از عملگرهای افزایش و کاهش ( ++ و -- ) میشه استفاده کرد و در بیسیک.نت، خودمون باید با =+ و =- کار لازم رو در یک دستور جداگانه ( برخلاف سی# ) انجام بدیم.
+ در سی# استفاده از Nullable Types بصورت آوردن علامت سوال بعد از نوع داده میتواند صورت بگیرد، مثلا ?int ، در بیسیک.نت از کلاس System.Nullable استفاده می شود.
+ در بیسیک.نت از کلمه کلیدی IsDbNull استفاده میشه و در سی# باید خودمون مقدار متغیر رو با مقدار System.DBNull.Value مقایسه کنیم.
+ در بیسیک.نت از عملگر ^ برای به توان رساندن یک عدد استفاده میکنیم، در سی# باید از کلاس Math استفاده کنیم.
و و و ...

----------


## PC2st

حالا هم یک دفاع کنم، بد نیست، اظهار نظرات شخصی در مورد پست قبلی... :)





> + پارامترهای اختیاری - Optional Parameters


قبلا صحبت شده، اگر بگم خیلی تکراری میشه :)





> + صدا زدن متد مجازی بصورت غیر مجازی - کلمه کلیدی MyClass


در سی#، وقتی یک متد بصورت مجازی ( Virtual ) تعریف میشه، هیچ راهی نداره و متد override شده از کلاس به ارث رسیده باید بتونه بصورت 100% جای اون متد مجازی رو بگیره. بدون استفاده از این کلمه، هیچ مشکلی برای پیاده سازی ها پیش نمیاد و به نظرم در صورت استفاده نکردن از اون، یکسری قواعد زیر پا گذاشته نمیشه و استفاده از اون باعث راحتی کار میشه.





> + استفاده از کلمه کلیدی With...End With برای جلوگیری از کد نویسی تکراری


من برای اینکار از Copy و Paste استفاده میکنم و استفاده نکردن از With، باعث میشه که مسیرهای موجود به راحتی و در هر خط، قابل تشخیص باشند و استفاده کردن هم باعث میشه که کد جمع و جور تر به نظر بیاد.






> + تغییر طول یک آرایه - کلمه کلیدی Redim


نظر بخصوصی ندارم!






> + هر برنامه نویس، نحوه کامپایل کدش را میتواند به دلخواه تنظیم نماید.


میتونه باعث بشه که یک برنامه توسط هر برنامه نویس به یک سبک نوشته بشه... بعضی ها casting رو رعایت نکنند و بقیه رعایت کنند یا غیره و اینجوری کدهای یکسانی نوشته نمیشه و در بعضی تنظیمات، ممکنه عادات بدی رو به جا بگذاره.






> + استفاده از کلمه کلیدی When در کنترل Catch های یک استثنا


باعث راحتی کار میشه و جالب به نظر میرسه! این در حالی هست که در سی#، یک دستور Catch فقط یک وظیفه دارد و آن هم رسیدگی به خطاهاست نه چیز دیگه. ( امان از دست این پایبندی های سی# !)






> + وجود کلمه Is در ساختار Select Case...End Select


فکر کنم باعث راحتی کار بشه.
در سی# هر دستور کار خودش رو میکنه. برای این منظور از if استفاده میکنم. ( باز هم همون پایبندی !)





> + استفاده از عملگرهای checked و unchecked برای کنترل استثنای سرریز


این در سی# هست ولی فکر نمیکنم احتیاجی به استفاده از unchecked باشه! ( این مورد رو فکر کنم برای سازگاری با سی++ قرار دادند )، بصورت پیش فرض وضعیت روی unchecked هست.






> + در بیسیک.نت، پیاده سازی متد از یک اینترفیس، با نامی متفاوت برای آن امکان پذیر است در حالی که سی# چنین اجازه ای نخواهد داد!


به نظرم این مورد، یک ضعف برای بیسیک.نت به حساب میاد. یک قابلیت اضافی برای بیسیک.نت حساب میشه ولی باعث در هم ریختگی وضعیت کلاسها میشه.






> + سی# کدهای مختصری داره و از نمادها و کلمات خاص تشکیل شده در حالی که در بیسیک.نت کدها عموما به زبان گفتاری نزدیک تر هستند.


کد خلاصه تر باعث میشه زمان کمتری برای تایپ لازم باشه! فرض کن بخوای کدت رو توی Notepad بنویسی و بعد کامپایلش کنی!


همش نظرات شخصی بود، ممکنه شما اون مواردی که من گفتم بده، از نظر شما خوب باشه.

----------


## linux

> کد خلاصه تر باعث میشه زمان کمتری برای تایپ لازم باشه! فرض کن بخوای کدت رو توی Notepad بنویسی و بعد کامپایلش کنی!
> 
> 
> همش نظرات شخصی بود، ممکنه شما اون مواردی که من گفتم بده، از نظر شما خوب باشه.


خدایی؟ تا حالا چند خط کد توی نوت پد نوشتی؟

----------


## PC2st

> خدایی؟ تا حالا چند خط کد توی نوت پد نوشتی؟


خدائیش... هیچی! :)
بعدا شاید یه روز مجبور شدم توی Notepad بنویسم!!

----------


## PC2st

ببخشید، یک مورد رو یادم رفته بود اضافه کنم! اونهم تعریف کردن یک متغیر از نوع استاتیک در بدنه یک متد در بیسیک.نت بود ! :) ( این رو هم اضافه کردم )




> + تعریف متغیر از نوع استاتیک در بدنه یک متد


فکر کنم این کار رو انجام ندیم بهتره...

----------


## __H2__

سلام به برادران شفیق! به جوانان رشید دات نت کار!



> + استفاده از کلمه کلیدی global زمانی که تداخلی در نامهای مشابه بوجود میآید.


از کجا به این نتیجه رسیدید که Global در VB.Net وجود ندارد ؟!؟!؟!؟!؟!؟!




> + Syntax آن دارای انعطاف قابل توجهی است.


همانطوری که قبلاً بحث شد، Syntax دلیل نیست به قول دوستی، شما از سینتکس A خوشتان می آید و آن را قوی و راحت میدانید و من از B !!!!




> + کامنتهای طولانی را میتوان به سرعت در چند خط نوشت.


عجب !!!!! ما بعد از عمری برنامه نویسی نمیدانستیم که در VB نمیشود در چند خط دستوری را شکست !!!!! تازه به نظر می آید VB در این مورد ساده تر عمل میکند! مثلاً دو تعریف زیر را در نظر بگیرید، کدام خلاصه تر هستند؟؟؟؟؟؟

System.Data.SqlClient.SqlConnection dbCon = new System.Data.SqlClient.SqlConnection("ConnectionString");
 
Dim dbCon As New System.Data.SqlClient.SqlConnection("ConnectionString")





> + در سی# از عملگرهای انتسابی بیتی =& و =^ یا =| میشه استفاده کرد.


در عوض در VB.Net هم عملگر ^ برای توان (خودتان هم گفتید) ونیز =^ برای توان رسانی سریع را داریم!!!!




> + در سی# استفاده از Nullable Types بصورت آوردن علامت سوال بعد از نوع داده میتواند صورت بگیرد، مثلا ?int ، در بیسیک.نت از کلاس System.Nullable استفاده می شود.


در این مورد هم گرچه در IL فرق ندارند ولی در VB9 اضافه شده.




> + در بیسیک.نت از کلمه کلیدی IsDbNull استفاده میشه و در سی# باید خودمون مقدار متغیر رو با مقدار System.DBNull.Value مقایسه کنیم.


یک دفاع هم از #C بکنیم ضرر ندارد! (بفهمند پدر کشتگی نداریم!) من هیچ وقت از IsDbNull استفاده نکردم و همیشه از همان مقایسه نوع استفاده میکنم، بیشتر خوشم می آید.




> به نظرم این مورد، یک ضعف برای بیسیک.نت به حساب میاد. یک قابلیت اضافی برای بیسیک.نت حساب میشه ولی باعث در هم ریختگی وضعیت کلاسها میشه.


به نظر من اصلاً ضعف نیست و کمال قدرت است! کلمه کلیدی Implements کاملاً روابط را مشخص میکند و کدی تمیز و بی نقص میدهد!

راستی من مطلب فوق را در #C نمیدانستم! یعنی اگر دو Interface که دارای دو متد هم نام باشند در کلاسسی تعریف شوند، چه میشود ؟

----------


## Alireza_Salehi

با تشکر از دوستان برای بیان شباهت ها و تفاوت ها،

اما آیا واقعا نحوه کامنت گذاری چند خطی (وقتی در هر دو با یک کلید میان بر میشه این کار رو کرد) ، یا بود ونبود یک دو تا Keyword می تونه دلیل انتخاب یک زبان بشه ،یا مثلا برای مکانیزه کردن یک سیستم پیچیده مثل یک بانک ، بیمه یا .... واقعا این چیزها مهمه ؟ 

یا مثلا مایکروسافت در آزمون هاش (MCSD,MCSE,......)یا همه اون جاهایی که سطح تخصص و توانایی رو مشخص می کنند ، سطح توانایی برنامه نویس ها رو با این چیزها می سنجند؟
یا وقتی شما می خوای یک جا استخدام بشی درباره عملگرهای بیتی ، یا نحوه کامنت گذاری ازتون می پرسند؟

آیا برای یک برنامه نویس حرفه ای و یا حتی برای کامپایلر بود ونبود یک Keyword یا چند خطی کردن دستورات یا شیک بودن ظاهر کد مهمه (همون طور که در پست های قبلی دوستان مثال زدند اگر شما از امکانات زبان مد نظرتون اطلاعات کامل داشته باشید می تونید کدهای بهینه تری نسبت کسانی که اطلاع کافی ندارند بنویسید)؟

آیا اصلا مهم نیست که یک زبان برنامه نویسی چقدر توانایی پیاده سازی مفاهیم اساسی برنامه نویسی و تولید نرم افزار را داره؟

آیا بررسی توانایی کامپایلرها در همون چند خطی که در پست های قبلی بود تموم میشه؟

آیا مهم نیست یک زبان چقدر هزینه های تولید نرم افزار رو پایین میاره؟

آیا مهم نیست یک زبان چقدر کار پشتیبانی از نرم افزار رو ساده میکنه؟

آیا مهم نیست یک زبان چطور پیاده سازی مستندات و تبدیل آنها به یک برنامه رو ساده میکنه؟

و آیاهای مهمی که جواب داده نشدند و همچنان در حال مقایسه ظواهر هستیم!


به نظر من اگر می خواهیم بحثی کنیم در این موارد باشه ، چون همه ظواهر سلیقه ای هستند و هر کس بنا به عادت و سلیقه ظاهر رو انتخاب میکنه!

و اگر این دو زبان در موارد پایه ای و اساسی برابرند دیگه چه بحثی می مونه؟

----------


## PC2st

> سلام به برادران شفیق! به جوانان رشید دات نت کار!


سلام بر استاد عزیز و گرامی...
از نظر من همه کاربران سایت، استاد هستند، من هم به عنوان یک دانشجو با اساتید بحث و گفتگو میکنم، چون اساتید همواره از دید دیگری به قضیه نگاه میکنند و دانشجویان یک دید دانشجوئی روی قضیه دارند :)





> از کجا به این نتیجه رسیدید که Global در VB.Net وجود ندارد ؟!؟!؟!؟!؟!؟!


از اونجائی که این قابلیت رو پیدا نکردم! عجب دلیل *مزخرفی*! :(
از نکته ای که گفتید ممنونم... ایرادم برطرف شد.





> همانطوری که قبلاً بحث شد، Syntax دلیل نیست به قول دوستی، شما از سینتکس A خوشتان می آید و آن را قوی و راحت میدانید و من از B !!!!


راستش بهتر بود یک مثال میزدم :)
اینم یک مثال از سنتکس قابلیت انعطاف :

for( int a = 0, b = 0; a < 5; a++, b++ )
{
MessageBox.Show( ((int)( a * b )).ToString() );
}

اگر معادل حلقه for فوق رو دقیقا مثال بالا، در بیسیک.نت پیدا کنید ممنون میشم...





> مثلاً دو تعریف زیر را در نظر بگیرید، کدام خلاصه تر هستند؟؟؟؟؟؟


استفاده از using در سی# مشکل رو حل میکنه.
حالا چی؟ چه چیزی مشکل رو حل میکنه؟ مثل زیر :

Public Class Form1
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 End Sub
End Class

یا :

public class Form1 : Form
{
 private void Form1_Load( object sender, EventArgs e )
 {
 }
}






> راستی من مطلب فوق را در #C نمیدانستم! یعنی اگر دو Interface که دارای دو متد هم نام باشند در کلاسسی تعریف شوند، چه میشود ؟


هیچ مشکلی پیش نمیاد :) میشه هر کدومش رو به طور واضح پیاده سازی کرد. برای اینکار قبل از نام متد، نام اینترفیس اضافه میشه.


public interface A
{
 void A();
}
public class B : A
{
 void A.A()
 {
 }
}


در بیسیک.نت :

Public Interface A
 Sub A()
End Interface
Public Class B : Implements A
 Public Sub A() Implements A.A
 End Sub
End Class

حالا کدومشون تایپ کمتری لازم دارند ؟؟!


حال ادامه بحث !!



> در عوض در VB.Net هم عملگر ^ برای توان (خودتان هم گفتید) ونیز =^ برای توان رسانی سریع را داریم!!!!


دوست عزیز نوشته بودم که :



> موارد کوچک دیگری هم هست که بد نیست عنوان بشه، میتونه خیلی بیشتر از موارد زیر باشه :


بعدش اون مورد بیسیک.نت ( استفاده از ^ ) و در سی#، استفاده از عملگر انتسابی بیتی و ... رو در اونجا نوشتم! چون درسته که تفاوت دارند ولی میتوان مشابهشون رو در دیگر زبان پیدا کرد. پس فکر نمیکنم اینجا مشکلی وجود داشته باشه :) و یک سوء تفاهم کوچولو رخ داده.




> به نظر من اصلاً ضعف نیست و کمال قدرت است! کلمه کلیدی Implements کاملاً روابط را مشخص میکند و کدی تمیز و بی نقص میدهد!


فرض کنید کلاسهای دات نت فریم ورک رو به همین شیوه مینوشتند! دیگه *معلوم نبود* هر متد برای چه اینترفیسی نوشته شده و عملا باعث *بهم ریختگی* کلاسها میشه.
مثلا یک کلاس ToString رو به نام ToMyStr و یکی دیگه به نامه String و دیگری به نام ConvertToString استفاده میکرد! که این مورد هم به ماهیت دو زبان بر میگرده.

----------


## PC2st

> یا بود ونبود یک دو تا Keyword می تونه دلیل انتخاب یک زبان بشه ،یا مثلا برای مکانیزه کردن یک سیستم پیچیده مثل یک بانک ، بیمه یا .... واقعا این چیزها مهمه ؟


میتونه تا حدودی مهم باشه.

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

میدونم، با این چند خط مقایسه کوچک، اصلا نمیشه واقعا متوجه اصل قضیه شد ولی از هیچی بهتره.
نتیجه ای که من گرفتم، سی# قوائد خاص خودش رو داره و بیسیک.نت هم قوائد خاص خودش.

مثلا از نظر من سی# بهتره، چون در یک چهار چوب خاص ( حالات کمتر ) باید کد نوشته بشه تا کدها ( کلاسها ) *مرتب تر* سازماندهی شوند.
در حالی که قابلیتی مثل MyClass در سی++ هم وجود داشت!
ولی سی# این رو در خودش جای نداد ( و فکر کنم جای نخواهد داد )
چون ماهیت سی# و نگاه سی# به شی گرائی تا حدودی با سی++ یا بیسیک.نت فرق میکنه.
فکر کنم با اون تفاوتهائی که من نوشتم، بشه تشخیص داد که ماهیت این دو زبان چیست.
حالا هر کسی خودش میتونه انتخاب کنه که کدوم قوائد واسش بهتره.

بیسیک.نت هم استاندارد خاص خودش رو داره که طی این استاندارد باید به گونه ای باشه که با vb هم سازگار باشه و طبق اصل بیسیک، راحت هم باشه و با .نت هم کار کنه.

و گرنه همه ماها میدونیم که قدرت IL چیزی *فراتر از تبدیل کدها*ی سی# به IL داره به عبارت دیگه در IL حالات خاصی میتونه انجام بشه که اون حالات رو نشه حتی در سی# یا بیسیک.نت تصور کرد که چطور اون حالات رو پیاده سازی کنیم!

----------


## __H2__

سلام مجدد به اساتید جوان رشید دات نت کار!!! (بهتر شد؟)

با عرض پوزش از کاربر arsp_2004 (وقتی سوال و مسئله ای مطرح میشود ما هم مجبور به جواب میشویم! پس با اجازه!)




> راستش بهتر بود یک مثال میزدم :)
> اینم یک مثال از سنتکس قابلیت انعطاف :
> 
> for( int a = 0, b = 0; a < 5; a++, b++ )
> {
> MessageBox.Show( ((int)( a * b )).ToString() );
> }
> 
> اگر معادل حلقه for فوق رو دقیقا مثال بالا، در بیسیک.نت پیدا کنید ممنون میشم...


چشم! خواهش دارم! خداحافظ شما! سلام علیکم!

For a AsInteger = 0 To 5
   MessageBox.Show(CStr(a * a))
Next

 :لبخند گشاده!:   :قهقهه:   :لبخند گشاده!:  سه خط! حال کردی دوست شفیق! باشه حالا قهر نکن!

Dim a AsInteger = 0, b AsInteger = 0
DoWhile a < 5
    a += 1 : b += 1
    MessageBox.Show(CStr(a * b))
Loop





> استفاده از using در سی# مشکل رو حل میکنه.


یعنی چی ؟؟؟؟؟؟؟؟؟؟؟؟؟ استفاده از using در آن مورد خاص چه مشکلی را حل میکند؟




> حالا چی؟ چه چیزی مشکل رو حل میکنه؟ مثل زیر :
> 
> Public Class Form1
> Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
> End Sub
> End Class
> 
> یا :
> 
> ...


نشد دیگه! شما یک خط دستور #C را در بالا ننوشتید! اینجوری معاملمون نمیشه!!!

this.Load += new System.EventHandler(this.Form1_Load);

بدون این خط دستور فوق در #C کار نمیکند! حالا کدام کوتاه تر است ؟؟؟؟ تازه نبود حالت فوق در #C من را دچار مشکلی کرده که در تاپیکی مطرح کرده ام و هنوز کسی جوابی برای حل آن در #C نداده!





> هیچ مشکلی پیش نمیاد :) میشه هر کدومش رو به طور واضح پیاده سازی کرد. برای اینکار قبل از نام متد، نام اینترفیس اضافه میشه.
> 
> 
> public interface A
> {
> void A();
> }
> public class B : A
> {
> ...


من این را به عنوان ابهام نگفتم، و میخواستم خودم بدانم و بابت جوابتان ممنون هستم.




> فرض کنید کلاسهای دات نت فریم ورک رو به همین شیوه مینوشتند! دیگه *معلوم نبود* هر متد برای چه اینترفیسی نوشته شده و عملا باعث *بهم ریختگی* کلاسها میشه.
> مثلا یک کلاس ToString رو به نام ToMyStr و یکی دیگه به نامه String و دیگری به نام ConvertToString استفاده میکرد! که این مورد هم به ماهیت دو زبان بر میگرده.


بازم نشد! بسیاری از رابطهای دات نت پیاده سازی های private دارند و راه اصلی دسترسی به Interface های یک کلاسس استفاده مستقیم از متدهای آن کلاسس نیست، باید رابط اشاره گر رابط مورد نظر از دل کلاسس مورد نظر بیرون کشیده شود و از متدهای اشاره گر رابط استفاده شود که با این کار چه در VB و چه در #C باید متدها هم نام رابط صدا زده شوند و ربطی به پیاده سازی داخلی در کلاسس ندارد، در اصل این ارزش و قابلیت رابطها است و یک زبان شی گرا نمیتواند نقضش کند.




> + پیاده سازی راحت برای کلاسهای مشتق شده از IEnumerable و انعطاف استفاده از Iterators


یادتان رفت بگویید به بهای تولید کد IL بیشتر!

----------


## PC2st

در مورد کدی که ارائه کردید :

Dim a As Integer = 0, b As Integer = 0
Do While a < 5
    a += 1 : b += 1
    MessageBox.Show(CStr(a * b))
Loop

میشه بپرسم چه انعطاف بخصوصی در اون بکار رفته ؟! شما اون کاهش و افزایش رو در *بدنه* حلقه Do While قرار دادید و من اون رو در *اعلان* حلقه for و من *دو متغیر رو در اعلان* یک for تعریف کردم و شما اون دو تا رو بصورت یک *دستور جداگانه قبل از* حلقه While... ! میشه بپرسم انعطاف اینهائی که نوشته بودید، در چه موردی بود ؟!





> یعنی چی ؟؟؟؟؟؟؟؟؟؟؟؟؟ استفاده از using در آن مورد خاص چه مشکلی را حل میکند؟


در بالای کدهاتون بنویسید :

using System.Drawing;

بعدش :

Point p = new Point();






> نشد دیگه! شما یک خط دستور #C را در بالا ننوشتید! اینجوری معاملمون نمیشه!!!


این موردی که گفتید یک *استثناء* است و قصد من گفتن *کنترل Event* ها نبود، تا آنجائی که من شنیدم، این مورد در بیسیک.نت راحت تر صورت میگیرد و جزء همان مواردی هست که در یک زبان هست و در دیگری هم وجود داره ولی با تفاوت، که من یادم رفته بود بنویسم و الان اضافش کردم. اما در مورد مبحثی غیر از این، و *بطور کلی* تر، تایپ کدهای سی# همواره کمتر خواهد بود. ( من تا سه ساعت بیام بنویسم IF...Then...End IF یا بنویسم Class A : Implements B و ... )



_تصحیح شد..._







> بسیاری از *رابطهای* دات نت پیاده سازی های private دارند


نه اینطوری نیست، رابطها اصلا پیاده سازی ندارند، شاید منظور شما کلاسهای مجرد یا abstract بوده است.





> بازم نشد! بسیاری از رابطهای دات نت پیاده سازی های private دارند و راه اصلی دسترسی به Interface های یک کلاسس استفاده مستقیم از متدهای آن کلاسس نیست، باید رابط اشاره گر رابط مورد نظر از دل کلاسس مورد نظر بیرون کشیده شود و از متدهای اشاره گر رابط استفاده شود که با این کار چه در VB و چه در #C باید متدها هم نام رابط صدا زده شوند و ربطی به پیاده سازی داخلی در کلاسس ندارد، در اصل این ارزش و قابلیت رابطها است و یک زبان شی گرا نمیتواند نقضش کند.


متاسفانه این قسمت رو متوجه نشدم.

----------


## PC2st

> + سی# کد نویسی در یک اصول مشخص رو مهمتر از راحتی در کد نویسی تلقی میکنه در حالیکه در بیسیک.نت، راحتی در کد نویسی ارجحیت دارد.


کمی که بیشتر فکر کردم دیدم نمیتونم خودم رو کامل با این جمله متقائد کنم! پس پاکش کردم :)





> در سی#، وقتی یک متد بصورت مجازی ( Virtual ) تعریف میشه، هیچ راهی نداره و متد override شده از کلاس به ارث رسیده باید بتونه بصورت 100% جای اون متد مجازی رو بگیره. بدون استفاده از این کلمه، هیچ مشکلی برای پیاده سازی ها پیش نمیاد و به نظرم در صورت استفاده نکردن از اون، یکسری *قواعد زیر پا گذاشته نمیشه* و استفاده از اون باعث راحتی کار میشه.


فکر کنم بهتر بود میگفتم که، قوائد سی# زیر پا گذاشته نمیشه ! ( چون قوائد بیسیک.نت چیز دیگه است )

----------


## __H2__

سلام بر جوانان غیور دات نت کار ایران! اساتید حال و آینده!!!!!! پیشاپیش از حضار و اساتید بزرگ به دلیل طولانی شدن مجدد پاسخم عضر خواهی میکنم!
میدونید! من دیشب رفتم سر کوچه دولیتر گازوئیل گرفتم و ریختم تو مخم و همشو سوزوندم! آخرش به این نتیجه رسیدم:!
" من واقعاً لذت میبرم این جوانان رشید و منصف را میبینیم که هیچ وقت از راه انصاف و مرام دور نمیشوند و تمایلات شخصی شان را قاطی نمیکنند!!! "

آخه انصاف تون و شکر!
هر کجا VB دست برنامه نویس را باز میزاره تا راحت باشه و زیر ساختها را از اون مخفی میکنه این جزو معائب و گناهان کبیره VB.Net محسوب میشه (مثل همین کد کثیف Form1.Show و...) ولی هر جا #C همین کار را انجام میده این جزو امکانات ملکوتی #C حساب میشه (مثل yield و...) حتی VB.Net بیچاره اگر صرفاً دست برنامه نویس را باز بذاره و زیر ساخت خاصی را هم مخفی نکنه و امکان و قدرت فزونی در اختیار اون بذاره باز هم جزء معایب آن حساب میشه (مثل همین نام ها در پیاده سازی های رابط ها که به نظر من برتری VB.Net در این مورد است و...) 
ولی دوباره هر کجا #C دست برنامه نویسش را باز میذاره و او را آزاد میذاره و قید و بند را از اون بر میداره این باز هم جزء امکانات بی نظیر اون حساب میشه (مثل همین حلقه For بی حساب و کتاب! و...) حتی وقتی VB.Net برنامه نویس را محدود میکند و مثلاً او را مجاب میکند که در حلقه های For صرفاً یک ایندکس داشته باشیم تا از اشتباه جلوگیری شود بازهم آن را چزء معایبش حساب میکنید نه سردتان میسازد نه گرمتان!

به بیان غیر پوشیده میتوان گفت هر چیزی را که رفتاری شبیه #C نداشته باشد جزء معایب میدانید، شما رأی خود را صادر کرده اید و اینجا صرفاً VB را با معیارهای خودتان محاکمه میکنید و بررسی واقعی مزیت و عیب در کار نیست (هر چه #C دارد حسن است و هرچه ندارد اگر زبانی داشته باشد عیب آن زبان است! تفکر جالبی است! هر که طبق #C رفتار میکند شما قبول دارید و هر که نیست در پیت است!!!!!!!!)

با برسی در پستهای قبلی بیشتر ایرادها و معایبی را که دوستان مطرح کردند من چیزی جز غالب فوق الذکر ندیدم.




> متاسفانه این قسمت رو متوجه نشدم.


علمای دات نت کار (#C یا VB.Net و...) بهتر از هر کسی میدانند که نام متد در کلاسسی تضمینی بر اجرای متد همنام با رابطی نیست و برای اجرا و دسترسی بی نقص و کامل به اعضای یک رابط باید اشاره گر رابط به دست بیاید و برای اجرای و دسترسی به اعضا باید از نام های مصوب استفاده شود و این در ذات اولیه اصول طراحی رابطها است و هیچ زبان برنامه نویسی توانایی نقض آن را ندارد، در خیلی از موارد هم اعضای موجود در کلاسس دسترسی protected دارند که برای دسترسی به رابط از خارج باید اشاره گرش بدست آید، حتی اساتید بهتر میدانند که بسیاری از رابطهای پیشرفته و قدرتمند دات نت با رابط System.IServiceProvider عرضه میشود که عملاً اشاره گر رابط را پس میدهد.
بگذریم! به کد زیر دقت کنید!


Public Interface ISample
    Sub SampleSub()
    ReadOnly Property SampleProperty() As Integer
End Interface
 
Public Class SampleClass
    Implements ISample
 
    Private ReadOnly Property ISample_SampleProperty() As Integer Implements ISample.SampleProperty
        Get
            Return 123
        End Get
    End Property
 
    Private Sub ISample_SampleSub() Implements ISample.SampleSub
        System.Windows.Forms.MessageBox.Show("OK!" & vbCrLf & "run ISample.SampleSub")
    End Sub
End Class
 
 
 
 
 Dim X As New SampleClass()
 
'Syntax error: 'ISample_SampleSub' Sub in not accessible in this context because it is 'Private'
X.ISample_SampleSub()
 
'Syntax error: 'SampleSub' is not a member of 'SampleClass'
X.SampleSub()
 
Dim I As ISample = X
I.SampleSub()
 
'Or
'With DirectCast(X, ISample)
 
 
Dim value As Integer = I.SampleProperty


راه اصلی استفاده از یک رابط چیزی شبیه دستورات فوق است (در #C نیز همین است، باور ندارید، اساتید و مراجع #C حضور دارند) وقتی شما اشاره گر رابط را بدست آورید دیگر نام پیاده سازی شده و حتی سطح دسترسی مهم اصلاً نیست و شما میتوانید با خیال راحت اعضای رابط را استفاده کنید، باز هم تاکید میکنم که علمای حاضر در همینجا بهتر میدانند که مخصوصاً در حالات پیشرفته مثل دسترسی از طریق رابط قدرتمند System.IServiceProvider راه فوق تنها راه است.
البته باز هم تاکید میکنم که یک قابلیت بسیار خوب است و اگر دوستان ناراحت نشوند من آن را برتری میدانم، در این مورد VB با قدرت دست برنامه نویسش را باز گذاشته ولی قوانین OOP را نقض نکرده (در اصل اگر میخواست هم نمیتوانست فقض کند!) 
راستی من #C بلد نیستم، (چشم بسته غیب گفتم!) ولی میشه شما لطف کنید و بگید وقتی دو رابط با یک متد هم نام در کلاسسی در #C پیاده سازی میشود، چطور میتوان به آن متد از خارج دسترسی داشت؟؟؟ و اینکه اگر بخواهیم بدون به دست اوردن اشاره گر رابط مورد نظر (همانطور که خودتان انجام میدهید) بخواهیم آن متد را صرفاً به وسیله اشاره گر کلاسس اصلی اجرا کنیم، چه کدی باید نوشت؟؟؟ (اگر به همان روشی باشد که من الآن حدس میزنم، مزیت جالب و قوی VB.Net در این مورد خاص مشخص میشود و شما هم در صورت منصف بودن به مثبت بودن وجود این امکان در VB.Net معترف میشوید و آن را با بی انصافی تمام جزء معایب حساب نمیکنید)






> در بالای کدهاتون بنویسید :
> 
> using System.Drawing;
> 
> بعدش :
> 
> Point p = new Point();


ها! ببخشید! من هواسم به این Using نبود ! در فکر آن Using بودم!!!
آخه جدا از این مباحث من در جاهای دیگر هم اشاره کرده ام که اصلاً از دستور فوق و معال VB آن یعنی Implement خوشم نمی آید! و از آنها استفاده نمیکنم، (و این را با دقت در اکثر کدهایم متوجه میشوید که اغلب مسیرها کامل هستند) بحرحال حق با شماست و روش فوق کدنویسی را کاهش میدهد ولی توجه داشته باشید که کد VB هم باز کاهش می یابد و باز کمتر میشود!
البته تاکید میکنم که بحث بر سر سینتکس اصلاً اصولی نیست ولی باز هم در مورد ان for توجه داشته باشید VB هم در مواردی کدی کمتر از #C تولید میکند (مثل همان رویدادها)
(با تاکید مجدد بر عدم بث بر سر سینتکس! لطفاً ابهامات این تیپی مطرح نکنید که مجبور به پاسخ شویم!)





> فکر کنم بهتر بود میگفتم که، قوائد سی# زیر پا گذاشته نمیشه ! ( چون قوائد بیسیک.نت چیز دیگه است )


VB.Net به هیج وجه اجازه کوچکترین تخطی از قوانین OOP و وراثتی را نمیدهید، اگر میتوانید مثالی بزنید وگرنه اینطور تخریب چهره نکنید!!!!!!!!!!!  :لبخند:  





> در سی# هر دستور کار خودش رو میکنه. برای این منظور از if استفاده میکنم. ( باز هم همون پایبندی !)


همان مسئله اول که گفتم! چون #C قابلیت When را ندارد پس باید توجیهی آورده شود! آیا استفاده از for به جای while مصداق حرف شماست؟ و...





> + استفاده از عملگرهای checked و unchecked برای کنترل استثنای سرریز - Overflow exception control


در VB.Net میتوان تا حدودی این کار را انجام داد! و گزینه مورد نظر را برای کل پروژه تایین کرد. (که خطای سرریز را بگیرد یا نه! البته در کل پروژه)





> ببخشید، یک مورد رو یادم رفته بود اضافه کنم! اونهم تعریف کردن یک متغیر از نوع استاتیک در بدنه یک متد در بیسیک.نت بود ! :) ( این رو هم اضافه کردم )
> 			
> 		
> 
> فکر کنم این کار رو انجام ندیم بهتره...


چرا؟ برای اینکه #C این قابلیت را ندارد بزهم نتیجه گرفتید که این قابلیت بدی است؟؟؟؟؟؟؟ (همان تفکر که در اول گفتم)







> بعدا شاید یه روز مجبور شدم توی Notepad بنویسم!!


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

اگر هم بحث را به ادیتور ها بکشانیم میتوالن گفت:
عزیز دل برادر ، قدرت ادیتور VB.Net را دست کم گرفته اید! شما خط اول را بنویسید و Enter را بزنید مابقی را ادیتور دات نت تایپ میکند!
مثلاً شما بنویسید Try و Enter کنید، VB.Net با هوشمندی و سخاوت تمام Catch ex As Exception و نیز End Try را تایپ میکند!
از این بحثها اصلاً خوشم نمی آید ولی مجبورم قدرت کم نظیر ادیتور VB.Net را یادآوری کنم، من زبانهای بسیار و ادیتورهایشان را دیده ام ولی به جرأت میگویم تا حالا ادیتوری قوی تر و کامل تر از VB.Net ندیده ام! دلیل دارم! همین درج کدهای قطعی و واضح، کافیست دستوری را بنویسید و آن دستور لزوم کدهایی دیگر را قطعی کند، بعد از زدن Enter کلیه کدهای قطعی به صورت خودکار تایپ میشوند، مثل نمونه فوق یا کافیست شما از کلاسسی وراثت بگیرید که آن کلاسس شامل اعضای MustOverride باشد و کلاسس شما هم برچسب MustInherits را نداشته باشد، فوراً دستورات Overrides اعضای مورد نظر به طور خودکار تایپ میشوند، یا وقتی رابطی را پیاده سازی میکنید، لازم نیست تک تک اعضای رابط را دستی بنویسید، بعد از Enter پیاده سازی رابط مورد نظر فوراً درج میشود و یا امکان ارائه گزارش کامل کلیه خطا ها و هشدارها در هر لحظه و بدون نیاز به کامپایل و یا با یک نک Backspace فوراً لیست لغات مجاز قابل تایپ ظاهر میشود (بله در #C هم وجود دارد ولی اگر لیست بسته شود برای باز شدن مجدد آن باید مدام Backspace زده شود تا به سر بلوکی مشخص برسیم و لیست مجدداً باز شود و یا نگه داری همیشه گی کدها در حالت تمیز و شتری شده صحیح که تخطی از آن غیر ممکن است! و... (برای چندمین بار تاکید میکنم که این بحث ها علمی نیستند، آنها را وسط نکشید که مجبور به پاسخ شویم!)
تازه از این گذشته، آیا کدهای پروژه های بزرگ و تمیز C را ندیده اید؟؟؟؟؟ (بعید میدانم) من بارها در کدهای تمیز و بی نقص بزرگان C خطول این تیپی را دیده ام!


} //end loop
 
} //end if
 
etc ...


وقتی بزرگان C به صورت عمدی .... چی بگم آخه؟؟!! واقعاً نمیدانم میتوانم شما را راضی کنم یا نه؟! اگر کمی منصف تر باشید متوجه میشوید که VB8 دیگر آن در پیت غیر قابل قیاس با ++C نیست که حتی مقایسه شان باعث خنده میشد، کمی تعصبتان را کم کنید و چشمانتان را باز کنید (چشم ها را باید شست، جور دیگر باید دید) اونوقت حقیقت را درک میکنید. 
علاما و فضلا و فقها (و مراجع #C !) در صورت نیاز و ابهام جدید ما همچنان در خدمت هستیم.
موفق و پیروز و سربلند باشید.

----------


## PC2st

سلام بر استاد گرامی.




> آخه انصاف تون و شکر!
> هر کجا VB دست برنامه نویس را باز میزاره تا راحت باشه و زیر ساختها را از اون مخفی میکنه این جزو معائب و گناهان کبیره VB.Net محسوب میشه (مثل همین کد کثیف Form1.Show و...) ولی هر جا #C همین کار را انجام میده این جزو امکانات ملکوتی #C حساب میشه (مثل yield و...) حتی VB.Net بیچاره اگر صرفاً دست برنامه نویس را باز بذاره و زیر ساخت خاصی را هم مخفی نکنه و امکان و قدرت فزونی در اختیار اون بذاره باز هم جزء معایب آن حساب میشه (مثل همین نام ها در پیاده سازی های رابط ها که به نظر من برتری VB.Net در این مورد است و...)


منظورم از ایرادات این بود که اگر سی# جائی دستمون رو باز میگذاره، لطمه ای به کدهای نوشته شده نمیخوره ولی در بیسیک.نت جائی که دست برنامه نویس باز میمونه، برای بعد میتونه *مشکل ساز* بشه... مثلا همین قرار دادن متغیر استاتیک در یک متد و کامپایل کد به طرق مختلف و ... همه اینها برای سازگاری با *VB* قرار داده شدند، که به نظرم بهتره استفاده نشه...






> به بیان غیر پوشیده میتوان گفت هر چیزی را که رفتاری شبیه #C نداشته باشد جزء معایب میدانید، شما رأی خود را صادر کرده اید و اینجا صرفاً VB را با معیارهای خودتان محاکمه میکنید و بررسی واقعی مزیت و عیب در کار نیست (هر چه #C دارد حسن است و هرچه ندارد اگر زبانی داشته باشد عیب آن زبان است! تفکر جالبی است! هر که طبق #C رفتار میکند شما قبول دارید و هر که نیست در پیت است!!!!!!!!)
> 
> 
> 
> با برسی در پستهای قبلی بیشتر ایرادها و معایبی را که دوستان مطرح کردند من چیزی جز غالب فوق الذکر ندیدم.


درسته، کاملا درسته :)
بهمین خاطر اینبار صحبت درباره عیبها رو در یک پست جداگانه ( پست شماره 93 ) و تحت عنوان "*اظهار نظر شخصی*" قرار دادم و به قول شما چیزی که شبیه به سی# نبود رو یک عیب دونستم :) !!!!!
وگرنه اون پستی ( پست شماره *92* ) که مربوط به مقایسه بود رو سعی کردم در حد امکان نظرهای شخصی نداشته باشه و هر کسی خودش یک نتیجه بگیره، هر چند که اون مقایسه هم میتونه تاحدودی صحیح نباشه.






> راستی من #C بلد نیستم، (چشم بسته غیب گفتم!) ولی میشه شما لطف کنید و بگید وقتی دو رابط با یک متد هم نام در کلاسسی در #C پیاده سازی میشود، چطور میتوان به آن متد از خارج دسترسی داشت؟؟؟



public interface A {
    void M(); }
public interface B {
    void M(); }
public class C : A, B { 
    void A.M() {
        Console.Beep( 800, 100 ); }
    void B.M() {
        Console.Beep( 100, 100 ); } }
 

و مثلا برای صدا زدن متد پیاده سازی شده از اینترفیس B :

( ( B )( new C() ) ).M();

همینطور که میبینید فقط یک بوق آرام ( بم ) شنیده میشه.





> (اگر به همان روشی باشد که من الآن حدس میزنم، مزیت جالب و قوی VB.Net در این مورد خاص مشخص میشود و شما هم در صورت منصف بودن به مثبت بودن وجود این امکان در VB.Net معترف میشوید و آن را با بی انصافی تمام جزء معایب حساب نمیکنید)


کاملا داره در مورد Implements برای اینترفیسها ( رابطها ) سوء تفاهم میشه. منظور من این مواردی که شما گفتید *نبود* !
منظور من این بود که در بیسیک.نت :
میتوان *نام های مختلفی* برای متدهای پیاده سازی شده از رابط ها، ایجاد کرد که باعث *ناهماهنگی* بین کلاسهائی میشه که از اون رابط ها، استفاده کرده اند که انجام دادن این کار، جالب به نظر نمیرسه!






> VB هم در مواردی کدی کمتر از #C تولید میکند (مثل همان رویدادها)


درسته و این یک مورد رو در پست مربوط به مقایسه ( پست شماره 92 ) قرار دادم. ولی در غیر اینصورت ( حتی بدون در نظر گرفتن حلقه for ) بطور کلی، کدهای سی# تا حدودی کمتر از بیسیک.نت است.






> VB.Net به هیج وجه اجازه کوچکترین تخطی از قوانین OOP و وراثتی را نمیدهید، اگر میتوانید مثالی بزنید وگرنه اینطور تخریب چهره نکنید!!!!!!!!!!!


بله، و به همین خاطر بود که نوشتم :



> فکر کنم بهتر بود میگفتم که، قوائد سی# زیر پا گذاشته نمیشه ! ( چون قوائد بیسیک.نت چیز دیگه است )


 




> همان مسئله اول که گفتم! چون #C قابلیت When را ندارد پس باید توجیهی آورده شود!


این مورد رو در قسمت "اظهار نظرات شخصی" نوشتم. که به نظرم سی# زبانی هست که یک چیزی مثل ctach کارش فقط کنترل استثنا هاست نه چیز دیگه ولی در بیسیک.نت خیر. چون سی# از سی++ و بیسیک.نت از ویژوال بیسیک 6 گرفته شده پس ماهیت این دو زبان در نحوه کنترل catch ها هم میتونه متفاوت باشه.






> چرا؟ برای اینکه #C این قابلیت را ندارد بزهم نتیجه گرفتید که این قابلیت بدی است؟؟؟؟؟؟؟ (همان تفکر که در اول گفتم)


مورد تعریف کردن یک متغیر بصورت استاتیک در بدنه یک متد، میتونه جالب نباشه و به نظرم بهتره که تمام متغیرهایی که طول عمرشون بیشتر از اجرای یک متد است، بعنوان یک *فیلد* در بدنه یک کلاس تعریف شوند. در بیسیک.نت هر دو حالت امکان پذیره.






> توجه تان را به مسئله حساسیت به حروف بزرک و کوچک جلب میکنم، این مسئله در جای غیر از ادیتور مخصوص میتواند منشاء خطاهای بسیار شود! تازه میتوانید درج پرانتز در انتهای متدهای بدون پارامتر را هم در نظر بگیرید، با کمی بی دقتی دچار مشکلات بسیار میشوید.


در مورد حساست، میتونه اینطور باشه.
در مورد پرانتز، فکر نمیکنم مشکلی پیش بیاد، چون وقتی یک متد رو صدا میزنم، میدونم متد هست پس فراموش کردن پرانتز به معنای فراموش کردن کلمه Dim در بیسیک.نت است !






> شما اطمینان دارید که در پروژه بزرگ با گیومه باز و بسته شده مشکل پیدا نمیکنید؟


شما چی؟ شما مطمئن هستید که در پروژه های بزرگ با موارد زیر مشکلی پیدا نمیکنید؟
Class...End Class
Interface...End Interface
Module...End Module
IF...End IF
For...Next
بکار بردن هر کلمه برای هر چیزی، باید بخصوص باشه، مثلا یک کلاس حتما باید با کلمه End Class پایان پیدا کنه نه چیز دیگه.
که موارد بالا در سی# به شکل زیر :
class
interface
static class
if
for
و چهار چوب هر یک از اونها با { و } معلوم میشه نه چیز دیگه!
در ضمن من فکر میکنم که یافتن بلاکهای { و } خیلی راحت تر از یافتن End Class یا End Module یا End Sub و ... باشه.






> عزیز دل برادر ، قدرت ادیتور VB.Net را دست کم گرفته اید! شما خط اول را بنویسید و Enter را بزنید مابقی را ادیتور دات نت تایپ میکند!
> مثلاً شما بنویسید Try و Enter کنید، VB.Net با هوشمندی و سخاوت تمام Catch ex As Exception و نیز End Try را تایپ میکند!


بی خیال بابا ... :)
در سی# لازم نیست که کلمه public یا private یا class و ... بصورت کامل تایپ بشه و لیست مورد نظر نمایش داده بشه. این جنبه هم مد نظر داشته باشید.



> یا وقتی رابطی را پیاده سازی میکنید، لازم نیست تک تک اعضای رابط را دستی بنویسید،


از مظالبی که در زمینه IDE گفتی، این یکی رو قبول دارم.



> برای چندمین بار تاکید میکنم که این بحث ها علمی نیستند، آنها را وسط نکشید که مجبور به پاسخ شویم!


موافقم.






> تازه از این گذشته، آیا کدهای پروژه های بزرگ و تمیز C را ندیده اید؟؟؟؟؟ (بعید میدانم) من بارها در کدهای تمیز و بی نقص بزرگان C خطول این تیپی را دیده ام!


در پروژه های بزرگ و تمیز (!) و یا کد بی نقض بزرگان (!)، من (!) فکر میکنم به این دلیل بصورت کامنت نوشته شده که مثلا End If تا یک برنامه نویس *تازه کار* ( مثل من ) راحت تر تشخیص بده که اون بلاک به چه دردی میخوره.

----------


## __H2__

سلام مجدد.



> در سی# هر دستور کار خودش رو میکنه.


این مسئله جای بحث بسیار دارد و میتوان .... 




> و مثلا برای صدا زدن متد پیاده سازی شده از اینترفیس B :
> 
> ( ( B )( new C() ) ).M();


نگرفتی دل انگیز جان! منظورم در مورد ....




> + استفاده از عملگرهای checked و unchecked برای کنترل استثنای سرریز - Overflow exception control


اگر این طور باشد VB.Net هم حداقل دو کلمه کلیدی دارد که معادلی در #C ندارند و تازه آن دو دوکار مختلف انجام میدهند در حالی که checked , unchecked یک مسئولیت را کنترلر میکنند و آن دو کلمه ....


من جوابی برای ابهامات فوق آماده کرده بودم، ولی حالا به ذهنم رسید که یک نفر باید به این بحث طولانی پایان دهد! در نتیجه من ایثار میکنم  :لبخند گشاده!:  و از جواب دادن خودداری میکنم تا دوستان ارجمند هم مجبور به جواب نشوند که بعد من هم ... :گیج:  !!!!! (وگرنه این بحث حساس ژئوپلتیکی تا معادله lim x, x->1/0 ادامه مییابد!) انشا ا... خاتمه ای باشد بر تاپیک پر کار فوق !

در زیر لیستی از کلمات کلیدی (نه تابع و نه امکانات، صرفاً کلمات رزو شده) دو زبان که مشابه مستقیم و بی واسطه ای در زبان دیگر ندارند به همرا راه حل آن آورده شده (در حد سواد دبستانی اینجانب!)، لیست بدون هیچ غرضی تهیه شده و در مورد خوبی یا بدی کلمه کلیدی بحثی نکرده و صرفاً راه حل نبود آن در زبان مقابل بررسی شده (حتی میخواستم در مورد Option Explicit On کلمه 'پسندیده و واجب موکد' را هم بنویسم باز صرف نظر کردم)، تا صرفاً کمکی باشد برای دوستان جهت فهم زبان دیگر و تبدیل کدهای از یک زبان به زبان دیگر. سعی کردم تمام کلمات رزو شده را تک به تک بررسی کنم تا چیزی که معادل واضح و مستقیمی ندارد از قلم نیافتد (حتی اسم #C هم اول آوردیم تا دوستان بد برداشت نکنند!  :بوس:  )

خیلی دوست داشتم که تک تک کلمان دو زبان و معادل آن را مینوشتم تا مرجعی کامل داشته باشیم ولی وقت اجازه نداد و مجبوراً از معادل های واضحی که صرفاً لغت تغییر میکند پرهیز کردم.
#VB.Net <-> C
unsafe,fixed <-> جهت کد نویسی غیرامن، بدون معادل در VB.Net
stackalloc <-> برای تخصیص حافظه در حالت کد نویسی غیر امن، در VB.Net (والبته در حالت مدیریت شده) میتوان از دستور New استفاده کرد.
out <-> استفاده مستقیم از کلاسس System.Runtime.InteropServices.OutAttribute
checked,unchecked <-> در VB.Net فقط میتوان برای کل پروژه آن را تایین کرد.
volatile <-> استفاده مستقیم از کلاسس System.MTAThreadAttribute
sizeof <-> استفاده مستقیم از تابع System.Runtime.InteropServices.Marshal.SizeOf
yield <-> پیاده سازی عادی طبق قوانین OOP
?,?? <-> استفاده مستقیم و بی واسطه از کلاسس System.Nullable و دستور If یا IIf

C#‎ <-> VB.Net
MyClass <-> بدون معادل خام در #C، باید متدی میانه و private تعریف شود و متد قابل override و محل های دیگر مورد نیاز از آن استفاده کنند.
Option Explicit On/Off <-> بدون معادل در #C، در #C همراه این قابلیت روشن است.
Option Strict On/Off <-> بدون معادلدر #C، در #C همراه این قابلیت روشن است.
Option Compare Text/Binary <-> در #C همراه این قابلیت همواره بر روی Binary است و در صورت نیاز باید از متدهای موجود خود فریم وروک استفاده کرد.
On Error Resume Next <-> باید از دستورات پیاپی Try استفاده کرد.
Handles,WithEvents,AddHandler,RemoveHandler <-> هندلینگ runtime به وسیله اپراتور =+
Declare,Ansi,Unicode,Auto,Lib,Alias <-> استفاده مستقیم از کلاسس System.Runtime.InteropServices.DllImportAttribute و کلمه کلیدی extern
Preserve <-> استفاده مستقیم از تابع System.Array.Reverse
ReDim <-> استفاده مستقیم از تابع System.Array.Resize
_Erase <-> بدون معادل در #C_
*Erase <-> میتوان در #C تمام اشاره گرها را برابر null قرار داد و جمع آوری کننده حافظه هرز را فراخانی کرد. * 
And, Or <-> در صورت نیاز پیاده سازی در چند شرط (توجه: معادل &&, || کلمات AndAlso و OrElse هستند.)
_Stop <-> بدون معادل در #C، ولی در خیلی از مواقع (نه تمام موارد) میتوان از نقاط توقف (F9) استفاده کرد._
*Stop <-> استفاده مستقیم از متد System.Diagnostics.Debugger.Break*
Mid <-> شکستن کد و استفاده ترکیبی از اعضای کلاسس String
Static in methods <-> متغیر مورد نظر باید سراسری تعریف شود.
Is in select case <-> باید از switch استفاده نکرد و از if elseif استفاده کرد.
With <-> در معادل دقیق باید متغیری محلی تعریف شود و از آن استفاده شود.
Optional <-> بدون معادل قطعی در #C، ولی میتوان از Overload استفاده کرد و کدی بسیار مشابه ساخت.
Like <-> با کمی دقت میتوان از کلاسس System.Text.RegularExpressions.Regex استفاده کرد.
End <-> باید از متد System.Windows.Forms.Application.Exit استفاده کرد.
When <-> باید از if در داخل بلوک catch استفاده کرد.
CByte,CSByte,CShort,CUShort,CInt,CUInt,CLng,CULng,  CDec,CDbl,CDate,CSingle,CStr,CChar <-> استفاده مستقیم از توبع کلاسس System.Convert
CType <-> استفاده مستقیم از تابع System.Convert.ChangeType به همراه عملگر قالب ریزی.
^ <-> استفاده مستقیم و بی واسطه از تابع System.Math.Pow
_\ <-> بدون معادل قطعی در #C، ولی میتوان در بیشتر موارد از تابع System.Math.DivRem استفاده کرد.معادل\ (int)_

به نظرم کلمه رزو شده با اپراتوری را فراموش نکردم ولی چند نکته کوچک را هم برای تبدیل کد یاد آوری کنم، اساتید میدانند ولی ذکرش در اینجا بد نیست، چون منشع بسیاری از تبدیلات اشتباه است، پس با اجازه اساتید بیان میکنم:
- برای مقایسه در #C باید از == و در VB.Net از =
- برای مقایسه دو اشاره گر (شیء) در #C باید از == استفاده کرد و در VB.Net از Is
- نماد null در #C با نماد Nothing در VB.Net برابر است.
- کلمه پرکاربرد this در #C با Me در VB.Net برابر است.
- و یک مشکل شایع دیگر! کاراکتر \ برای #C مفهوم خاصی دارد و برای VB.Net نه!
در نتیجه در تبدیل به #C حواسشان باشد در نوشتن رشته های String خام در کدهای #C نباید بنویسید "C:\test.txt" بلکه کد درستش "C:\\test.txt" است! خود کامپایلر درستش میکند، این قضیه در #C مثل درج جفت کوتیشن است.
و در تبدیل به VB.Net هم حواسشان باشد اسلش دوم را حذف کنید و آن را به امان خدا رها نکنید!  :لبخند گشاده!: 
*یا باید در #C قبل از رشته خام مورد نظر کاراکتر @ قرار بگیرد.* 
- در #C آرایه ها با [] دسترسی میشوند ولی در VB.Net درهمه جا و همه حال و بدون استثنا ایندکس ها با () است و اصلاً از [] استفاده نمیکند.
- خیلی کم دیده ام ولی بهرحال کد a=b=c در C و VB کلاً مفهوم زمین تا زیر زمین دارد!!!  :لبخند گشاده!:  
_- VB.Net اجازه تعریف متدی هم نام کلاسس پایه را نمیدهد مگر به طور واضح با Shadows بیان شود ولی این کلمه برای #C لازم نیست و در تبدیلات باید حذف یا اضافه شود.در #C میتوان از کلمه کلیدی new هم استفاده کرد._

و بعضاً دوستان VB کار تازه کار در تبدیل کدهایشان به #C دچار اشتباهات زیر میشوند:
- ; نماد پایان دستور در #C است و Enter معادلش در VB.Net است! پس بعد از پایان دستور ; فراموش نشود!
- بعد از if و while و foeach و using و... در #C وجود یک جفت پرانتز اجباری است.

با آرزوی موفقیت روز افزون، فعلاً بای!!!!

----------


## PC2st

جناب __H2__، اول از همه، فوق العاده از شما تشکر میکنم...
با مواردی که اشاره کردید موافقم، بجز موارد زیر :






> stackalloc <-> برای تخصیص حافظه در حالت کد نویسی غیر امن، در VB.Net (والبته در حالت مدیریت شده) میتوان از دستور New استفاده کرد.


کلمه new در بیسیک.نت، شباهتی به stackalloc در سی# نداره. خودتون تاحدودی تفاوتش رو گفتید، من هم تا حدودیش رو بگم : stackalloc یک حافظه ی *stack* را برای یک *اشاره گر* اخذ میکند. ( حافظه stack نه heap و البته برای اشاره گر )






> volatile <-> استفاده مستقیم از کلاسس System.MTAThreadAttribute


شباهتی بین این دو ندیدم.






> sizeof <-> استفاده مستقیم از تابع System.Runtime.InteropServices.Marshal.SizeOf


بلد نبودم به کمک همین متد در بیسیک.نت، اندازه یک نوع داده ( مثل Integer ) رو *بدون ایجاد یک شئ از اون*، بدست بیارم! اگه کسی لطف کرد، کدش رو بگذاره.






> ReDim <-> استفاده مستقیم از تابع System.Array.Resize


این مورد رو نمیدونستم... واقعا ممنونم.





> Erase <-> بدون معادل در #C


اگر درست فهمیده باشم، مثلا مثل زیر ( خط پنجم ) :

int[] A = new int[3];
A[0] = 12;
A[1] = 13;
A[2] = 14;
A = new int[3];
MessageBox.Show( A[0].ToString() );







> Stop <-> بدون معادل در #C، ولی در خیلی از مواقع (نه تمام موارد) میتوان از نقاط توقف (F9) استفاده کرد.


معادلش در دات نت، متد System.Diagnostics.Debugger.Break.






> Mid <-> شکستن کد و استفاده ترکیبی از اعضای کلاسس String


یک مثال از معادلش : MessageBox.Show( "NO Way".Substring( 3 ) );






> \ <-> بدون معادل قطعی در #C، ولی میتوان در بیشتر موارد از تابع System.Math.DivRem استفاده کرد.


معادلش در سی# :

( int )( 11 / 4 )







> - VB.Net اجازه تعریف متدی هم نام کلاسس پایه را نمیدهد مگر به طور واضح با Shadows بیان شود ولی این کلمه برای #C لازم نیست و در تبدیلات باید حذف یا اضافه شود.


اگر درست فهمیده باشم، در سی#، استفاده از کلمه کلیدی new






> در نتیجه در تبدیل به #C حواسشان باشد در نوشتن رشته های String خام در کدهای #C نباید بنویسید "C:\test.txt" بلکه کد درستش "C:\\test.txt" است! خود کامپایلر درستش میکند، این قضیه در #C مثل درج جفت کوتیشن است.


در سی#، استفاده از علامت @ قبل از رشته باعث میشه که وجود چنین کاراکترهائی، نادیده گرفته بشه.



منم براتون آرزوی موفقیت لحظه افزون دارم :)

----------


## hamid_isf_1360

بچه ها من چیز اطلاعات زیادی از تفاوت های بین این دو زبان ندارم
ولی می دونم اگه شما سی شارپ را انتخاب کنید و با سینتاکس اون خو بگیرید و عادت کنید پس فردا اگه خواستید برید سراغ جاوا خیلی راحت ترید خواستید برید سراغ برنامه نویسی فلش یعنی اکشن اسکریپت بازم راحت ترید و خواستید برگردید به سی خدابیامرز بازم راحت ترید.

----------


## __H2__

سلام،



> کلمه new در بیسیک.نت، شباهتی به stackalloc در سی# نداره. خودتون تاحدودی تفاوتش رو گفتید، من هم تا حدودیش رو بگم : stackalloc یک حافظه ی *stack* را برای یک *اشاره گر* اخذ میکند. ( حافظه stack نه heap و البته برای اشاره گر )


مظلوم گیر آوردی! چرا میزنی! خودم هم گفتم که معادل کامل ندارد.




> sizeof <-> استفاده مستقیم از تابع System.Runtime.InteropServices.Marshal.SizeOf 
> بلد نبودم به کمک همین متد در بیسیک.نت، اندازه یک نوع داده ( مثل Integer ) رو *بدون ایجاد یک شئ از اون*، بدست بیارم! اگه کسی لطف کرد، کدش رو بگذاره.


ای بابا خاهش دارم!!!! آقا نگید! بد! زشت!  :لبخند گشاده!:   :لبخند گشاده!:   :لبخند گشاده!:  

System.Runtime.InteropServices.Marshal.SizeOf(GetT  ype(Integer)





> Erase <-> بدون معادل در #C 
> اگر درست فهمیده باشم، مثلا مثل زیر ( خط پنجم ) :


نوچ!!!! به نظر میرسد نمیدانید چه کار میکند! Erase آرایه را نابود میکند! البته حالا که فکرش را میکنم شاید بشود با کلاسس GC در #C کاری کرد وگرنه به طریقه های دیگر نمیشود، باید امتحان کنم.




> Mid <-> شکستن کد و استفاده ترکیبی از اعضای کلاسس String 
> یک مثال از معادلش : MessageBox.Show( "NO Way".Substring( 3 ) );


ای آقا نگید! بده! میگم شما VB کار نیستید نگید چرا؟؟؟؟؟؟؟ این که شما مثالش را زدید تابع Mid است !!!!! ولی آن که من گفت دستور Mid است!  :اشتباه:  




> معادلش در سی# :
> ( int )( 11 / 4 )


نمیدانم، ولی اگر این دستور تقسیم را به حالت اعشار به دست آورد و سپس آن را به عدد صحیح تبدیل کند معادل \ در VB.Net نمیشود.




> در سی#، استفاده از علامت @ قبل از رشته باعث میشه که وجود چنین کاراکترهائی، نادیده گرفته بشه.
> 
> معادلش در دات نت، متد System.Diagnostics.Debugger.Break.


جالب بود! مخصوصاً اولی! این #C یک کمی ناقولا شده ما خبر نداشتیما!!!! ممنون، لطف ببیتی! راستی پس باید نشانه هایی از قبیل n\ هم در حالت فوق دیگر کار نکند؟
راستی اگر پست جدیدی زدید بگید این در ورژن 2003 هم بوده؟ (آخه نکته جالبیه و من مدت کمی که با C#‎2003 کار میکردم ندیدمش)
دو مورد فوق را در پست قبلی ام اصلاح میکنم.




> اگر درست فهمیده باشم، در سی#، استفاده از کلمه کلیدی new


اینم من نفهمیدم! یعنی سینتکسش چگونه میشود؟ کلمه new را در همان خط تعریف متد می آورید؟ اتما بحرحال بدون new هم باید کار کند، چون خودم چندین بار برایم پیش آمد و #C گیر نداد!
بحرحال این توسیه تبدیلی را هم کلاً از پست قبلی ام حذف میکنم، تا بعداً مشخص تر شود.


 امیدوارم ...

----------


## PC2st

> مظلوم گیر آوردی! چرا میزنی! خودم هم گفتم که معادل کامل ندارد.


شما مظلوم گیر آوردی...! :)
هیچ شباهتی بین new در بیسیک.نت و stackalloc در سی# نمی بینم!
از نظر من در بیسیک.نت معادل ناقصی هم وجود نداره ( ندیدم ).






> ای بابا خاهش دارم!!!! آقا نگید! بد! زشت!
> System.Runtime.InteropServices.Marshal.SizeOf(GetT  ype(Integer))


از پاسخ ممنونم. ( راستی، کد IL متفاوت بود! )






> نوچ!!!! به نظر میرسد نمیدانید چه کار میکند! Erase آرایه را نابود میکند! البته حالا که فکرش را میکنم شاید بشود با کلاسس GC در #C کاری کرد وگرنه به طریقه های دیگر نمیشود، باید امتحان کنم.


در مثال زیر :

int[] A = new int[3];
A = null;

خط دوم، آرایه نابود میشه.






> ای آقا نگید! بده! میگم شما VB کار نیستید نگید چرا؟؟؟؟؟؟؟ این که شما مثالش را زدید تابع Mid است !!!!! ولی آن که من گفت دستور Mid است!


به کمک کلاسهای دات نت :
در مثال زیر :

StringBuilder sBuilder = new StringBuilder( "Hello Man to Work" );
MessageBox.Show( sBuilder.Replace( "Man", "MEN", 6, 3 ).ToString() );

یا بهتر از اون، یعنی :

MessageBox.Show( "Hello Man to Work".Remove( 6, 3 ).Insert( 6, "MEN" ) );

... محتویات در message box نمایش داده میشه.






> نمیدانم، ولی اگر این دستور تقسیم را به حالت اعشار به دست آورد و سپس آن را به عدد صحیح تبدیل کند معادل \ در VB.Net نمیشود.


کاملا معادل اند. کار انجام شده در سی# رو با بیسیک.نت از لحاظ IL مقایسه کنید، تفاوتی نخواهند داشت.






> راستی اگر پست جدیدی زدید بگید این در ورژن 2003 هم بوده؟ (آخه نکته جالبیه و من مدت کمی که با C#‎2003 کار میکردم ندیدمش)


تا بحال سی# 2003 به عمرم ندیدم :)






> کلمه new را در همان خط تعریف متد می آورید؟


بله.






> بحرحال این توسیه تبدیلی را هم کلاً از پست قبلی ام حذف میکنم، تا بعداً مشخص تر شود.


در بیسیک.نت، این کار رو انجام دادم و گیر نداد.

Public Class A
    Public Sub Ver()
    End Sub
End Class
Public Class B : Inherits A
    Public Sub Ver()
    End Sub
End Class







> امیدوارم ...


من هم امیدوارم ... :)

----------


## __H2__

سلام



> خط دوم، آرایه نابود میشه.


من خودم هم کمی بررسی کردم و به همین نتیجه رسیدم ولی از لحاظ فنی آرایه تا زمانم سر زدن جمع آوری کننده حافظه هرز وجود دارد، که البته میتوان آن را به صورت دستی و اجباری فعال کرد. و اتفاقاً قبل از خواندن پست شما اصلاحش کردم.




> به کمک کلاسهای دات نت :


فرقی نکرد! من هم همیتن را گفتم، اگر دقت کنید میبینید که گفتم به وسیله اعضای کلاسس String قابل پیاده سازی است و اصلاً از اولش مشکلی نداشت و شما صرفاً کدش را آوردید.
من صرفاً راه حل کوتاه برای تبدیلات معرفی کرده بودم.  :لبخند گشاده!:  




> تا بحال سی# 2003 به عمرم ندیدم


بابا دیگه گیر نده! پیر مرد آزاری میکنی! شما به اون نسخه #C که با Visual Studio.Net 2003 عرضه شد چه میگویید ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ شاید بگید C#‎.Net1 یا شاید C#‎.Net 2003 !!! یعنی واقعاً متوجه منظورم نشدید؟؟ بابا تو دیگه کی هستی!!!  :قلب:  




> در بیسیک.نت، این کار رو انجام دادم و گیر نداد.


والا VB ما که یک خروار خطا میرزه روی سرمان آخرش هم کامپایل نمیکنه  !!!!؟؟؟؟!!!!؟؟؟؟

البته شاید ممکنه، احتمالاً به خاطر تنظیمات باشه! چون من همیشه بعد از نصب یک نرم افزار ساعت ها تو Option ها و Setting هایش چرخ میزنم و در مورد VS هم همین طور بود و سخت گیرانه ترین آپشن ها را همان ساعات اول نصب فعال کردم و تاحالا ندیدم که در این مورد گیر نده! پس شاید از همین مسئله باشه! نمیدانم!

----------


## PC2st

سلام بر دوست بزرگوار.




> فرقی نکرد! من هم همیتن را گفتم، اگر دقت کنید میبینید که گفتم *به وسیله اعضای کلاسس String* قابل پیاده سازی است و اصلاً از اولش مشکلی نداشت و شما صرفاً کدش را آوردید.
> من صرفاً راه حل کوتاه برای تبدیلات معرفی کرده بودم.


ببخشید، این رو متوجه نشده بودم... حواسم نبود!!



> *شکستن کد* و استفاده ترکیبی از اعضای کلاسس String


فقط این مورد شکستن کدش رو قبول ندارم :)




> - برای مقایسه دو اشاره گر (شیء) در #C باید از == استفاده کرد و در VB.Net از Is


_این مورد رو الان دقت کردم... در سی# هم از is استفاده میشه._
*تصحیح :* ببخشید، اشتباه کردم! این کلمه در سی# با بیسیک.نت فرق داره.

از اینکه گفتم سی# 2003 به عمرم ندیدم، یعنی تا حالا باهاش کار نکردم و محیطش رو ندیدم! :d :)




> والا VB ما که یک خروار خطا میرزه روی سرمان آخرش هم کامپایل نمیکنه !!!!؟؟؟؟!!!!؟؟؟؟
> البته شاید ممکنه، احتمالاً به خاطر تنظیمات باشه!


درسته، به خاطر تنظیمات بود... یه چیزی رو همین الان فهمیدم! اگه بخوایم برای اخطارها، برنامه کامپایل نشه ( همین موردی که گفتید ) :
1. در بیسیک.نت، باید در قسمت My Project - Compile گزینه Threat all warnings as errors انتخاب بشه.
2. در سی# باید در قسمت Properties - Building گزینه All از Threat warning as errors انتخاب بشه.

----------


## hozouri

> از لحاظ ساختاری و فرم کلاسها #C و Delphi خیلی شبیه هستند (شاید بخاطر اینکه هر دو توسط یک نفر طراحی شده‌اند).
> [/list:u:40b5a19e0b]


با سلام قصد جسارت نداشتم ولی بهتر نبود گفته بشه که توسط گروهی یا تیمی مشابه طراحی شده.

----------


## Naruto

> شما چی؟ شما مطمئن هستید که در پروژه های بزرگ با موارد زیر مشکلی پیدا نمیکنید؟
> Class...End Class
> Interface...End Interface
> Module...End Module
> IF...End IF
> For...Next
> بکار بردن هر کلمه برای هر چیزی، باید بخصوص باشه، مثلا یک کلاس حتما باید با کلمه End Class پایان پیدا کنه نه چیز دیگه.
> که موارد بالا در سی# به شکل زیر :
> class
> ...


خوب آخر برنامه End If -End Sub -End Class ببینید بهتر از 60 تا آکولاد هستش. :لبخند گشاده!: 
من #C را دوست دارم :قلب:  ولی این آکولادهاش چی بگم.... :خیلی عصبانی:

----------


## saed2006

> خوب، حالم یک کم بهتر شد  :wink: 
> 
> مایکروسافت طبق اخبار از منابع موثق در حال تولید یک پکیج *تولید اتوماتیک نرم‌افزار* است. بدین ترتیب که با نصب پکیج مذکور و اجرای آن یک Wizard باز میشود و از شما میخواهد تا مقصود و انتظارتان از برنامه‌ای که قرار است بوجود بیاید را طی مراحل ساده‌ای برای آن توصیف کنید.
> 
> سپس برنامه بطور اتوماتیک کاربرد (نرم‌افزار) موردنظر بهمراه دیتابیس مربوطه تولید کرده و برنامه آماده را تحویل میدهد!
> 
> برای کار با این پکیج مقدار دانشی که نیاز است در حد کمی فراتر از اپراتوری کامپیوتر میباشد!
> 
> اسلایدها و توضیحات این پکیج در کنفرانس آمستردام مایکروسافت به نمایش گذاشته شده است  :roll:


با سلام
اقای کرامتی الان سالها از این پست شما میگذره
الان نظرتون چه تغییری کرده؟
ایا مثل گذشته فکر میکنید؟
ممنون

----------


## h.jaza

سی شارپ و وی بی، Co-Evolution همدیگن؛ لذا مقایسه ی اونها و به رخ کشیدن مزایا و معایب یکی در برابر دیگری و بر عکس کار اساسا بیهوده ایه لذا پیشنهاد می کنم با طرح یک سری Off-Topic ها وقت خودتون و دیگران رو بی خود هدر ندین...

----------


## saed2006

کرامتی جان منتظر پاسخت هستم

----------


## lespaul

سلام

  آقا منم بدم نمیاد بدونم بعد از گذشت حدود 6 سال ( و به زودی 7 سال )  آیا هنوزم نظرات
پاربجا هستند یا تغییراتی کردند ؟

من هنوز نشونی از برنامه های فوق توی سیاست ماکروسافت ندیدم و در ضمن ، .NET به کل سیستم دولوپر هارو تغییر و ارتقا داده !

موفق باشید

----------


## pop_0098

من به یک کاربر تازه کار این را فهمیدم که با دات نت ماکروسافت می خواداگر ویندوزش به چالشی خورد صنعت تولید نرم افزارش را تو سیتیم عامل های دیگه داشته باشه تا سرمایه و حضور دائمی تو صنعت کامپیوتر داشته باشه 
نمونه مثل ایکس باکس که برای رقابت با شرکت سونی زد داد بیرون و خیلی کارهای دیگه که قبلا ماکروسافت نمی کرد و بعد انجام داد برای پول

----------


## amin_ir

از این تاپیک اینطوری استنباط میشه که ممکنه جواب به یک سوال بیش از یک سال طول بکشه ولی به هر حال سوالم را در خصوص تفاوت سی شارپ و وی بی دات نت می پرسم:

با توجه به اینکه دوستان بر این نظر متفق هستند که تفاوتهای عمده ای بین این دو زبان برنامه نویسی موجود نیست و فقط تفاوت بر سر سینتکس آنها می باشد در خصوص معماری سه لایه MVC آیا هر دوی این زبانها دارای قابلیت یکسان هستند . در مورد سی شارپ می دونم برای رجیستر کردن بخش VIEW لایه PL می توان به راحتی از متد RegisterMe استفاده نمود و یا از اینترفیس ها استفاده نمود آیا در VB.net هم امکاناتی از این دست برای پیاده سازی این نوع معماری قرار داده شده است؟

----------


## modirmasool

سلام دوستان. نخودی وارد می شود. :لبخند گشاده!: 
من بیچاره از اول با ویبی 6 شروع کردم حالا با توجه به این که این بحث ها مال چندین سال پیش هستش می خواستم ببینم الان که استادیو 10 اومده چیزی هم تغییر کرده یا نه. منظورم اینه که بر طبق پست های سال های قبل میتونم ویبی.نت رو شروع کنم یا نه؟
ممنون.

----------


## abizaki

> با اجازه از بزرگترها بنده به عنوان یه ریز برنامه نویس تمام بحث این تاپیک را خوندم و چیزی که متوجه شدم این بود که عزیزان دلفی کار سنگ Delfi.Net را به سینه می زنند دوستان Vb کار سنگ Vb.Net و یکسری از دوستان هم ++C و C#‎‎ به نظر من در آینده نه چندان دور دیگه زبانی به نام Delfi.Net یا VB.Net و ++C و... وجود خارجی نخواهد داشت مجموعه عظیمی به نام Visual Stadio.Net به بازار خواهد آمد که در عمل کل زبانهای برنامه نویسی را در خود حل کرده باشد دوستان اگر الان هم Visual Stadio.Net را نگاه کنند موقع انتخاب زبان برنامه نویسی شاید صحبت بنده را تایید کنند


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

----------


## abizaki

خوب از قرار معلوم این تاپیک، یکی از پیر ترین تاپیک های این سایته. من یه پیام به آقای کرامتی برای ورود مجدد به این تاپیک ارسال کردم. راستی سال ها بعد از ساخته شدن این تاپیک ، ویژوال اف شارپ هم اومد که انگار زبان با حالیه. سبک هم هست. اما آیا واقعا مایکروسافت داره استعمار گری می کنه؟ آیا دات نت فری ورک می تونه همه ی زبان ها و رقبای مایکرو سافت رو به زانو در بیاره؟ آیا با اومدن ویندوز 7 و حتی ورژن های بالا تر ویندوز، win32 و win64 از بین میرن؟ (قرار بود 6 سال پیش برن!!!!)

----------


## Mani_rf

> سی شارپ و وی بی، Co-Evolution همدیگن؛ لذا مقایسه ی اونها و به رخ کشیدن مزایا و معایب یکی در برابر دیگری و بر عکس کار اساسا بیهوده ایه لذا پیشنهاد می کنم با طرح یک سری Off-Topic ها وقت خودتون و دیگران رو بی خود هدر ندین...


این جمله را باید با آب طلا نوشت گذاشت بالای انجمن برنامه نویسی مبتنی بر Microsoft .Net Framework

----------


## Mani_rf

> با سلام قصد جسارت نداشتم ولی بهتر نبود گفته بشه که توسط گروهی یا تیمی مشابه طراحی شده.


نه دوست عزیز ، آقای *DelphiAssistant*  کاملا درست نوشته اند، این دو زبان دقیقا توسط یک نفر طراحی شده اند. (اما گروه پیاده سازی آنها متفاوت بوده.)

----------


## a...yar

بازار کار بیشتر سی شارپ رو قبول داره تا وی بی شما یه سر به نیازمندی های روزنامه همشهری بندازید همه سی شارپ می خوان ،دلیلش رو نمی دونم

----------

