#C برای برنامه نویسان ++C

مقایسه بین++C و #C بدون استفاده از clr/

مطالب زیر شامل مهم ترین تفاوت های بین
++C و #C است(بدون استفاده از clr/)، اگر شما برنامه نویس ++C باشید این مطلب می تواند مهم ترین تفاوت ها دو زبان را در یک نگاه به شما نشان دهد.

تفاوت ارث بری در ++C و #C

کلاس ها و سا ختار ها در ++C تقریباً یکسان هستند، در حالی که در #C کمی با هم فرق می‌کنند. از طریق کلاس ها در #C می‌توانید به هر تعدادی که می خواهید interface پیاده‌سازی کنید، اما تنها از یک کلاس می‌تواند ارث بری داشته باشید، همچنین ساختار ها در #C از ارث بری پشتیبانی نمی‌کنند و نمی‌توانید در آن به صورت صریح سازنده پیش‌فرض تعریف کنید(یکی از آنها به طور پیش فرض ارائه شده)
تفاوت آرایه ها در ++C و #C

در ++C آرایه ها فقط یک اشاره‌گر هستند، اما در #C آرایه ها یک شی هستند که دارای متد و خاصیت هستند. برای مثال در #C، آرایه درای خاصیت Length است که اندازه آرایه را نشان می‌دهد. آرایه ها در #C از اندیس ها هم پشتیبانی می‌کنند و میتوانید از طریق اندیس برای دسترسی به خانه های آرایه استفاده کنید. سینتکس تعریف آرایه ها در سی‌شارپ و ++C هم متفاوت است. علامت “[]” که بعد از نوع آرایه در سی‌شارپ می‌آید هیچگاه تغییر نمی‌کند.
تفاوت نوع Boolean در ++C و #C

در ++C نوع bool اساساً یک نوع عدد صحیح است اما در #C اینگونه نیست ونمیتوانید هیچگونه تبدیلی بین نوع داده bool و سایر انواع داده ای انجام دهید.
تفاوت نوع long در ++C و #C

نوع داده long در سی‌شارپ 64 بیتی است، اما در Microsoft ++C ، 32 بیتی است.
تفاوت ارسال پارامتر ها در #C و ++C

در ++C همه متغیر ها به صورت by value ارسال می‌شوند مگر اینکه صراحتاً مشخص کنیم که می خواهیم توسط اشاره گر یا refrence ارسال شود.در #C کلاس ها به طور پیش فرض by referenceهستند و ساختار ها نیز به صورت پیش فرض by vlue هستند. مگر اینکه )از طریق ref یا ( outبه صورت صریح مشخص کنیم که می خواهیم by refrence باشند.
تفاوت دستور switch در #C و ++C

بر خلاف ++C در #C نمیتوانید از یک case به case دیگر پرش داشته باشید.
Delegate ها در #C :

Delegate ها در #C تقریباً شبیه اشاره گر به توابع در ++C هستند(Delegate ها امن و type-safe هستند)
کلمه کلیدی base در #C

در #C از کلمه کلیدی base برای فراخوانی متد های کلاسی که override کرده ایم استفاده می کنیم.(برای override کردن در #C از کلمه کلیدی override استفاده می‌کنیم)

مخفی کردن متد ها با استفاده از new در #C

++C به صورت صریح از مخفی کردن(hiding) متد ها در ارث بری پشتیبانی میکند، در #C نیز میتوانید با استفاده از کلمه کلیدی new اعضای کلاس به ارث برده شده را مخفی نمایید.
رهنمود های پیش پردازنده در #C

در #C از فایل های هدر استفاده نمیکنیم. رهنمودهای پیش پردازنده برای کامپایل شرطی در #C مورد استفاده قرار میگرد.
try-finally و try-catch-finally در #C

#C دارای کلمه کلیدی finally است، کلمه کلیدی finally برای اجرای کدی که حتما” باید اجرا شود، حتی اگر استتثنایی وجود داشته باشد، استفاده می شود.

عملگر های #C

#C علاوه بر عملگر های & ، | و ^ دو عملگر اضافی با نام is و typeof دارد. که کاربرد زیادی در بعضی عبارت های منطقی دارد.
رهنمود using در#C

معادل کلمه کلیدی typedef در ++C است.در ++C از کلمه کلیدی typedef برای کوتاه تر کردن یا راحت تر کردن نام انواع داده ای که قبلاً تعریف شده است بکار میرود.
extern

در ++C از کلمه کلیدی extern برای import کردن انواع داده ای استفاده میشود. اما در #C استفاده ی محدود تری دارد و فقط برای اعلان متدی که از یک فایل خارجی(external) است، استفاده می‌شود.
static

کلمه کلیدی Static در ++C هم برای کلاس ها و هم برای انواع داده ای استفاده میشود، اما در #C فقط برای تعریف کلاس های استاتیک مورد استفاده قرار میگیرد.
متد Main و آرگومان های خط فرمان

متد Main در #C با متد main در ++C متفاوت است، در #C با M بزرگ شروع میشود و همیشه static است. و همچنین #C دارای پردازش خط فرامان به مراتب قوی تری نسبت به ++C است.
unsafe

ما اجازه استفاده کردن از اشارهگر ها را در #C نداریم مگر اینکه از حال unsafe استفاده کنیم.
Operator ها

سربار گذاری اپراتور ها در #C با ++C متفاوت است.
string

نوع داده string در ++C فقط آرایه ای از کاراکتر هاست در صورتی که string در #C یک شی است که از متدهای جستجوی قدرتمندی پشتیبانی می‌کند.
foreach

از کلمه کلیدی foreach برای پیمایش در بین آرایه ها و مجموعه ها در #C استفاده می‌شود.
ساختار اصلی برنامه های #C

#C از متد و متغیرهای سراسری(global) پشتیبانی نمی‌کند. متد ها و متغیر ها حتماً باید درون یک کلاس یا ساحتار تعریف شوند.
static، const و enum

رهنمود پیش پردازنده #defineدر ++C معمولاً برای تعریف مقادیر ثابت استفاده می‌شود. اما در #C راه های بهتری برای این کار وجود دارد مثل enum یا تعریف یک عضو استاتیک در کلاس یا ساختار. و اگر میخواهید چندین مقدار ثابت در برنامه خود بگنجانید میتوانید از یک کلاس جداگانه برای تعریف تمامی مقادیر ثابت استفاده کنید.
using و متا دیتا در #C

Import کردن type ها: در ++C، نوع های مشترک درون فایل های هدر قرار میگیرند. اما در #C این اطلاعات توسط متادیتا قابل دسترس هستند.
متد ها

متغیر های محلی در #C قبل از استفاده باید مقدار دهی شوند.
Garbage Collector

در ++C هر شی که ایجاد میشود باید پس از استفاده free شود، اما در #C این کار توسط Garbage Collector انجام می‌‌شود
Destructor یا مخرب ها

برای آزاد سازی منابع مدیریت نشده، #C داری سینتکس متفاوتی نسبت به ++C است.
Constructor یا سازنده

مانند ++C در #C هم وقتی یک سازنده معرفی نکنیم، سازنده‌ی پیش‌فرض فراخوانی می‌شود.
Bit Field در ++C

#C از Bit Field پشتیبانی نمی کند.
سرویس های ورودی / خروجی و قالب بندی در #C به کتابخانه زمان اجرای دات نت بستگی دارد.
خطای CS0241 در #C

پارامتر های متد در #C نمی‌توانند دارای مقادیر پیش فرض باشند. برای انجام این کار باید متد ها را overload کنید.
Genericها در #C

generic ها در #C هم شبیه template ها در ++C است . اما پیچیدگی های به مراتب کمتری نسبت به template ها در ++C دارد. در مقابل template ها در ++C قابلیت ها بیشتری نسبت به جنریک ها در #C دارد.