سی شارپ (به انگلیسی: C#، /si ʃɑːrp/ see sharp) زبانی شیءگرا و سطح بالا از خانوادهٔ زبانهای چارچوب داتنت شرکت مایکروسافت است.
زبان سی شارپ، یک زبان برنامهنویسی چند الگویی و منظم شده مدلهای تابعی، امری، عمومی، شیءگرا و جز گرا و در بستر دات نت میباشد. این زبان توسط مایکروسافت و جزئی از دات نت به وجود آمد و بعداً استانداردهای ECMA و ISO را نیز دربر گرفت. سی شارپ یکی از ۴۴ زبان برنامهنویسی است که توسط زمان اجرای زبان مشترک از چارچوب داتنت پشتیبانی و در همه جا به وسیله مایکروسافت ویژوال استودیو شناخته میشود.
زبان سی شارپ با قدرت و در عین حال سطح بالای خود توانسته توجه بسیاری از برنامه نویسان را به خود جلب کند.
این زبان برپایه سادگی، مدرن بودن، همه منظوره و شیءگرا بودن ساخته شد. آندرس هجلزبرگ، طراح زبان برنامهنویسی دلفی، سرپرستی تیم طراحان زبان سی شارپ را بر عهده داشت. این زبان دارای دستوری شیءگرا مشابه ++C است و به شدت از زبانهای جاوا و دلفی تأثیر پذیرفته است. در ابتدا نام این زبان COOL بود که مخفف C like Object Oriented Language بود، هر چند در ژوئیه ۲۰۰۰، زمانی که مایکروسافت پروژه را عمومی اعلام کرد، اسم آن به سی شارپ تغییر پیدا کرد.

استاندارد ECMA این اهداف طراحی زبان را برای سی شارپ برآورده میسازد:
استاندارد ECMA این اهداف طراحی زبان را برای سی شارپ برآورده میسازد:

در سال ۱۹۹۹، شرکت سان اجازه استفاده از زبان برنامهنویسی جاوا را در اختیار مایکروسافت قرار داد تا در سیستمعامل خود از آن استفاده کند. جاوا در اصل به هیچ پلت فرم یا سیستمعاملی وابسته نبود، ولی مایکروسافت برخی از مفاد قرار داد را زیر پا گذاشت و قابلیت مستقل از سیستمعامل بودن جاوا را از آن برداشت. شرکت سان پروندهای علیه مایکروسافت درست کرد و مایکروسافت مجبور شد تا زبان شیءگرای جدیدی با کامپایل جدید که به ++C شبیه بود را درست کند. در طول ساخت دات نت،
کلاسهای کتابخانهای با زبان و کامپایلر SMC نوشته شدند. در سال ۱۹۹۹ آندرس هلزبرگ گروهی را برای طراحی زبانی جدید تشکیل داد که در آن زمان نامش COOL بود و همانند C بود با خواص شیءگرایی. مایکروسافت در نظر داشت اسم این زبان را تا آخر Cool قرار دهد، ولی به دلیل مناسب نبودن برای اهداف تجاری این کار را نکرد. در ارائه و معرفی رسمی چارچوب داتنت در PDC در سال ۲۰۰۰ این زبان به سی شارپ تغییر نام یافت و کتابخانه کلاسها و runtime در ایاسپیداتنت به سی شارپ منتقل
شدند. مدیر و سرپرست طراحان در مایکروسافت آندرس هلزبرگ بود که تجربه قبلی او در طراحی Framework و زبانهای برنامه سازی++Borland، دلفی، Turbo Pascal، ویژوال ++C به آسانی در دستورالعملهای سی شارپ قابل رویت است و به همان خوبی در هسته CLR.
برخی از تفاوتهای زبان سی شارپ با C و ++C عبارتند از:
اکسسورها که خاصیت نیز گفته میشوند در زبان سی شارپ قادر به کنترل دسترسی اعضا و معتبرسازی دادهها هستند.
این زبان جزو زبانهای خانواده c میباشد و شباهت سینتکسی با زبان جاوا دارد
این کامپایلر در مقابل C یا ++C دارای ساختار بسیار متفاوتی است که دانستن آن به برنامهنویس امکان نوشتن برنامههای بسیار بهینه را خواهد داد.
در C یا ++C ساختار رشته به صورت ارایهای از نوع char بود که امکان اضافه کردن به رشته را محدود میکرد به دلیل ثابت بودن طول در آغاز تعریف ولی در سی شارپ دو نوع متفاوت رشته وجود دارد؛ که یکی به صورت ارایهای با طول ثابت ۲۵۶(در عمل ۲۵۵)موجوداست (به صورت پیش فرض) و در صورتی که با کمبود جا روبرو شود فضای جدید (بزرگتر) یافته و به ان انتقال میدهد؛ ولی در نوع دوم رشتهها از لیست پیوندی استفاده میشود.
سی شارپ دارای یک سامانه نوع یکپارچه است که به آن CTS میگویند. این بدان معناست که تمام انواع، شامل موارد اصلی مانند Integerها، مشتق شده از System.Object هستند. به عنوان مثال، هر نوع یک متد به نام ToString() را به ارث میبرد. بخاطر کارایی، انواع اولیه (و انواع مقداری) بهطور داخلی فضایی برای آنها بر روی پشته در نظر گرفته میشود.
CTS دادهها را به دو نوع تقسیم میکند:
انواع دادهای توده سادهای از داده میباشند. نمونههای انواع دادهای نه هویت مرجعی دارند و نه مفاهیم مقایسه مراجع را. برای مقایسه برابری یا عدم برابری انواع دادهای، خود مقدار دادهها را با یکدیگر مقایسه میکنیم مگر اینکه عملگرهای مشابه دوباره تعریف شده باشند. مقادیر دادههای مرجعی همیشه یک مقدار پیش فرض دارند و همیشه میتوانند ایجاد یا کپی شوند. یکی دیگر از محدودیتهای انواع دادهای این است که آنها نمیتوانند از یکدیگر مشتق شوند (ولی میتوانند اشتراکاتی داشته باشند) و
هم چنین نمیتوانند در سازنده مقدار دهی اولیه شوند. مثالی از انواع دادهای، بعضی از انواع اولیه مانند int و float و char و System.DateTime میباشند. در مقابل، انواع مرجعی مفهوم تعریف مرجعی را دارند (که در آن هر نمونه از نوع مرجع، بهطور ذاتی از دیگر نمونهها جدا میشود، حتی اگر داده هر دو نمونه یکی باشد). این دقیقاً نمونه مشابه مقایسه تساوی یا عدم تساوی دادههای مرجعی است، که در آن آزمایش برای مرجعها از دادهایها سریع تر است. در کل نه همیشه امکان تعریف نمونه مرجعی
وجود دارد و نه امکان کپی یا نمایش مقادیر مقایسه دو نمونه؛ ولی به هر حال انواع مرجعی خاص میتوانند این اعمال را از طریق سازندههای عمومی یا اجرای واسطهای مشابه (مثل ICloneable یا IComparable) انجام دهند. نمونههایی از انواع مرجعی، اشیاء، System.String و Sysmet.Array میباشند. هر دو نوع داده قابلیت انعطاف توسط تعریف به وسیله کاربر را دارند. در واقع وقتی ما نوع دادهای را به تابع ای ارسال میکنیم، آدرس داده نیز فرستاده میشود. البته این امر پیش فرض است ولی برای دادههای مثل آرایه، رشتهای، آدرس فرستاده میشود و ارسال از نوع مرجع میشود.
در اوت سال ۲۰۰۰، شرکت مایکروسافت، و Hewlett-Packard و شرکت اینتل به عنوان پشتیبان مشخصات سی شارپ را مانند CLI به سازمان استانداردسازی ECMA ارائه کردند. در دسامبر سال ۲۰۰۱، این سازمان، ECMA-۳۳۴ را با عنوان مشخصات زبان سی شارپ منتشر کرد. سی شارپ در سال ۲۰۰۳ به عنوان یک استاندارد ISO به ثبت رسید(ISO/IEC ۲۳۲۷۰). در سال ۲۰۰۲، ECMA دومین ویرایش از خصوصیات زبان سی شارپ را پذیرفت.
در ژوئن سال ۲۰۰۵، ECMA سومین ویرایش را با اضافه کردن مواردی همچون کلاسهای partial، متدهای ناشناس، انواع nullable و Genericها منتشر کرد. در ژوئیه ۲۰۰۵، ECMA استانداردها و TRها را همراه با پردازش Fast-Track اخیر به ISO/IEC JTC پیشنهاد کرد. این روند معمولاً ۶ تا ۹ ماه زمان میبرد. آخرین ویرایش این زبان در ۱۵ اوت سال ۲۰۱۲ در قالب Framework ۴٫۵ ارائه گردید

با توجه به توابع موجود در چارچوب داتنت امکان استفاده از این توابع وجود دارد که میتوان گفت برای هر کاری شرکت مایکروسافت تابعی پیشبینی کرده؛ که این امکان را ایجاد میکند که به فایل اصلی پروژه هیچ فایل کتابخانهای را اضافه نکنید (هم به صورت دستی یا خود کامپایلر). این موضوع خود باعث ایجاد فایلهای خروجی با حجم بسیار کم میشود. این موضوع در بسیاری از موارد
بسیار اهمیت دارد. برنامههای سی شارپ، همچون تمام برنامههای نوشته شده در چارچوب داتنت و سایر محیطهای ماشینی مجازی مانند جاوا، نیازمند منابع سامانه و حافظه بیشتری نسبت به برنامههای نوشته شده با سایر زبانها مانند سی پلاس پلاس است و هم چنین سرعت کمتری نیز دارد. هر چند تعریف زبان سی شارپ و CLI تحت استانداردهای ISO و ECMA استاندارد
شدهاند،CLI تنها قسمتی از Base Class Library (BCL) مایکروسافت میباشد که شامل کلاسهای غیر استاندارد استفاده شده در برنامههای سی شارپ نیز میشود. از این گذشته، بعضی از قسمتهای BCL تحت حق امتیاز مایکروسافت هستند که ممکن است پیادهسازی کامل framework را مختل کند، زیرا تنها بخشهای استاندارد دارای حق محافظت RAND در برابر مدعیان را دارند. همچنین در ساخت انواع برنامههای کاربردی از قبیل CRMها نیز قابل استفاده میباشد
متداولترین کامپایلر سی شارپ، Microsoft Visual C# میباشد.
کاملاً شبیه به پروژه Mono.
اسم سی شارپ از علامت موسیقی شارپ گرفته شده است که در موسیقی بیانگر این است که متن نوشته شده باید نیم قدم از خط بالاتر باشد.[۹] مطابق با ECMA-۳۳۴، بخش ۶، مخففها و اختصارها، نام زبان به صورت «#C» نوشته میشود(«کلمه لاتین C (U+۰۰۴۳) به همراه علامت عددی #(U+۰۰۲۳)») که به صورت «سی شارپ» تلفظ میشود. علامت «#» نباید با علامت شارپ در موسیقی(♯، U+266F) که در یک صفحه کلید استاندارد وجود ندارد اشتباه گرفته شود. پسوند شارپ، توسط بسیاری
دیگر از زبانهای دات نت مانند #J، #A و #F نیز به کار رفته است. پیادهسازی اولیه از زبان ایفل تحت دات نت نیز #Eiffel نام داشت که الان زبان ایفل را بهطور کامل پشتیبانی میکند. هم چنین این پسوند بعضی وقتها در کتابخانهها نیز به کار میرود، مانند #Gtk، #Cocoa و #Qt.
ممنو از ویکی
