PDA

View Full Version : C# وC++



amir.NET2
پنج شنبه 30 آذر 1385, 12:32 عصر
1- با C# فقط برنامه های تحت .NET میشه نوشت (در واقع C# برای .NET درست شده)
، اما با C++ هم برنامه های تحت .NET (managed) و هم برنامه های native میشه نوشت.
2-هنوز برای کارهای سطح پایین (مثل Device Driver) و سنگین (مثل بازی های سه بعدی)
C++ انتخاب اول و آخر محسوب میشه.
3- C# خیلی راحتتر ، تمیزتر و خوش ساخت تر از C++ طراحی شده و از نظر شی گرایی
هم پشتیبانی بهتری داره نسبت به C++ . C# کاملا شی گراست و اصلا نمیتونید برنامۀ غیر شی گرا
در اون بنویسید ، در صورتی که با C++ میتونین هم شی گرا و هم غیر شی گرا ، برنامه بنویسید.
از ویژگی های C# :
1- مدیریت خودکار حافظه توسط CLR
2- پشتیبانی از یک نوع String داخلی
3- پشتیبانی از foreach
4- پشتیبانی کامل از delegate و event و interface و Property و attribute ها
5 - XML Documentation
6 – checked / unchecked keywords
و ...
در C# برای انجام تمام کارها از کلاس های .NET استفاده میشه ، در ضمن در C# چیزی به نام فایلهای Header و #include و از این حرفا نداریم.
در واقع C# خیلی زیباتر از C++ طراحی شده ، چون به هر حال در طراحی C# از زبانهایی
مثل C++ و JAVA و Delphi درس گرفته شده و اشتباهات اون زبانها در C# تکرارنشده ؛
به عنوان مثال در C++ به تعداد انگشتان دست ، نوع دادۀ String داریم.
یا Multiple Inheritance که خیلی دردسر سازه ، یا مثلا در JAVA ، enum ها و Operator Overloading و Pointer و Property ها که همگی جزو ضروریات محسوب میشن ، وجود ندارن.
البته کسانی که میخوان کار سنگین یا سطح پایین در .NET انجام بدن ، معمولا همۀ قسمتهایی رو که امکانش هست با C# می نویسن و بقیه رو با C++ ؛
در C# از کلاسهای نوشته شده در C++ استفاده می کنن (WrapperClasses )
در کل C# ، سطح بالاتر(High Level ) از C++ است ؛ در C++ حتی میتونید مستقیما از
کد اسمبلی استفاده کنید.
در ضمن C# اولین زبان Component Oriented در خانوادۀ C محسوب میشه.

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

بزرگترین شباهت این دو زبان اینه که هر دو جزو خانوادۀ C هستن .

و

بزرگترین تفاوت اینکه : C# یک زبان type-safe هست (بر خلاف C++ ) و فقط باهاش میشه برنامه های تحت .NET نوشت.


البته قصدم از این مطالب اثبات برتری C# به C++ نبود ، چون به هر حال برای برنامه های
تحت دات نت C# بهترین گزینه است و در جاهای دیگه هنوز هم C++ قویترین زبان دنیاست.

منبع : خودم

manager
پنج شنبه 20 اردیبهشت 1386, 09:45 صبح
1- با C# فقط برنامه های تحت .NET میشه نوشت (در واقع C# برای .NET درست شده)
، اما با C++ هم برنامه های تحت .NET (managed) و هم برنامه های native میشه نوشت.
تمام برنامه های دات نت در اولین اجرا به کد Native تبدیل می شوند. اگر منظور شما برنامه های Win32 است باید بگم که VC++ که شما برنامه های Win32 تولید می کنید جزو .Net نیست و در این برنامه ها نمی توانید از کلاس های .Net Framework استفاده کنید.

3- C# خیلی راحتتر ، تمیزتر و خوش ساخت تر از C++ طراحی شده و از نظر شی گرایی
هم پشتیبانی بهتری داره نسبت به C++ . C# کاملا شی گراست و اصلا نمیتونید برنامۀ غیر شی گرا
در اون بنویسید ، در صورتی که با C++ میتونین هم شی گرا و هم غیر شی گرا ، برنامه بنویسید.
می شه یک نمونه از برنامه های غیر شیئ گرای C++ رو مثال بزنید ؟

در واقع C# خیلی زیباتر از C++ طراحی شده
دوست من مقایسه میان زبان ها به آسانی ارائه یک نظر شخصی نیست و مباحث علمی زیادی پشت این قضیه است. برای مطالعه ی بیشتر در پایان مقاله ای کوچک که عاری از نقص نیست را برای شما و سایر عزیزان من باب این موضوع قرار دادم.

در ضمن C# اولین زبان Component Oriented در خانوادۀ C محسوب میشه.
یعنی قبل از C# هیچ کدوم از زبانهای Java، یا C++ به صورت Component Oriented نبودند ؟
ولی در کل اصلا Component Oriented ربطی به زبان برنامه سازی نداره و تمام زبان های Visual از آن پشتیبانی می کنند.
ولی در کل ساخت MFC Application با VC++ بسیار مشکل است و یک زبان برنامه سازی به صورت نظری نباید اینقدر پیچیده باشد.

omid_Ahmadi
پنج شنبه 20 اردیبهشت 1386, 14:07 عصر
تمام برنامه های دات نت در اولین اجرا به کد Native تبدیل می شوند. اگر منظور شما برنامه های Win32 است باید بگم که VC++ که شما برنامه های Win32 تولید می کنید جزو .Net نیست و در این برنامه ها نمی توانید از کلاس های .Net Framework استفاده کنید.


تنها زبانی که در .NET این قابلیت رو داره که در اون هم به صورت Managed و هم به صورت Unmanaged کد نوشت C++ هست. این مورد با برنامه نویسی کاملا Managed و یا کاملا Unmanaged تفاوت داره. در مورد مدل اجرا هم از سیستمهای موجود در CLR برای لینک دادن بین کدهای Managed و Unmanaged استفاده می شه.
در صورت تمایل می تونم براتون نمونه کد از برنامه هایی که تا حالا به این صورت کار کردم آپلود کنم.

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

موفق باشید.

manager
جمعه 21 اردیبهشت 1386, 14:46 عصر
تنها زبانی که در .NET این قابلیت رو داره که در اون هم به صورت Managed و هم به صورت Unmanaged کد نوشت C++ هست. این مورد با برنامه نویسی کاملا Managed و یا کاملا Unmanaged تفاوت داره. در مورد مدل اجرا هم از سیستمهای موجود در CLR برای لینک دادن بین کدهای Managed و Unmanaged استفاده می شه.
این مطلب از بدیهیات است. در صورتی که در VC++ از managed code استفاده نشود می توان VC++ را جدا از زبان های دات نت تصور کرد. حال آنکه ترکیب managed code و unmanaged code برنامه های vc++ را محتاج .Net farmework می کند چه بسا سمت و سوی عرض بنده جای دیگریست.


در صورت تمایل می تونم براتون نمونه کد از برنامه هایی که تا حالا به این صورت کار کردم آپلود کنم.

حتما، باشد تا با مثال شما ذهن این حقیر باز شود.


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

amir.NET2
شنبه 22 اردیبهشت 1386, 12:46 عصر
با سلام

از آقای احمدی هم تشکر می کنم که پیگیر هستند

بررسی می کنم و اگه توضیحات دوستمون درست بود مطلب رو ویرایش می کنم

navid_8x
سه شنبه 19 شهریور 1387, 03:30 صبح
اگه به C++BUILDER سری بزنید می بینید که event و interface و Property در اون وجود داره.