सी शार्प (प्रोग्रामिंग भाषा)

 (C#) एक सामान्य उद्देश्य की उच्च स्तरीय प्रोग्रामिंग भाषा है, जो कई प्रोग्रामिंग प्रतिमानों का समर्थन करती है। सीशार्प स्थानिक टाइपिंग, मजबूत टाइपिंग, शब्दाक्षरित स्कोप, आदेशात्मक प्रोग्रामिंग, घोषणात्मक प्रोग्रामिंग, कार्यात्मक प्रोग्रामिंग, सामान्य प्रोग्रामिंग, आदान-प्रदान-आधारित प्रोग्रामिंग विधियों, ऑब्जेक्ट-ओरिएंटेड (वर्ग-आधारित), और घटक-उन्मुख प्रोग्रामिंग विधियों को सम्मिलित करती है।

सीशार्प प्रोग्रामिंग भाषा को 2000 में माइक्रोसॉफ्ट के एंडर्स हेल्सबर्ग द्वारा प्ररूपित किया गया था और बाद में 2002 में एक्मा इंटरनेशनल (एकमा-334) और 2003 में मानकीकरण/अंतर्राष्ट्रीय इलेक्ट्रोटेक्निकल कमीशन (आइएसओ/आइसीई 23270) के लिए अंतर्राष्ट्रीय संगठन द्वारा एक अंतरराष्ट्रीय मानक के रूप में अनुमोदित किया गया था। माइक्रोसॉफ्ट ने डॉटनेट फ्रेमवर्क और विज़ुअल स्टूडियो के साथ सी शार्प को प्रस्तुत किया। उस समय, माइक्रोसॉफ्ट के पास कोई ओपन-सोर्स उत्पाद नहीं था। चार साल बाद, 2004 में, मोनो सॉफ्टवेयर नामक एक स्वतंत्र और ओपन-सोर्स प्रोजेक्ट प्रारंभ हुआ, जो सीशार्प प्रोग्रामिंग भाषा के लिए एक क्रॉस-प्लेटफॉर्म संकलक और रनटाइम वातावरण प्रदान करता है। एक दशक बाद, माइक्रोसॉफ्ट ने विजुअल स्टूडियो कोड, रोसलिन और एकीकृत डॉटनेट प्लेटफॉर्म जारी किया, जो सभी सी शार्प संसकरणों को समर्थित करते हैं और स्वतंत्र, ओपन-सोर्स और क्रॉस-प्लेटफ़ॉर्म हैं। मोनो भी माइक्रोसॉफ्ट में सम्मिलित हो गया परंतु इसका विलय डॉटनेट में नहीं हुआ।

भाषा का सबसे नवीनतम स्थिर सी शार्प संस्करण 11.0 है, जिसे 2022 में डॉटनेट 7.0 में विमोचित किया गया था।

प्रारूप लक्ष्य
एकमा मानक सी शार्प के लिए इन प्रारूप लक्ष्यों को सूचीबद्ध करता है:
 * प्रोग्रामिंग भाषा का उद्देश्य सरल, आधुनिक, सामान्य-उद्देश्य, वस्तु-उन्मुख प्रोग्रामिंग का समर्थन करना है।
 * भाषा और उसके कार्यान्वयन को सॉफ्टवेयर अभियांत्रिकी सिद्धांतों के लिए समर्थन प्रदान करना चाहिए जैसे कि टाइप की जाँच, सरणी सीमा की जाँच, अप्रारंभीकृत चर, और स्वचालित संग्रह का उपयोग करने के प्रयासों का पता लगाना सॉफ़्टवेयर मजबूती, टिकाऊपन और प्रोग्रामर उत्पादकता को सरल बनाना महत्वपूर्ण हैं।
 * भाषा का उद्देश्य वितरित वातावरण में पर्यावरण के लिए उपयुक्त सॉफ्टवेयर घटकों के विकास में उपयोग है।
 * सॉफ्टवेयर स्थानांतरण स्रोत कोड प्रोग्रामर के लिए अत्यधिक महत्वपूर्ण है, विशेषतः जो पहले से ही सी और सी ++ से परिचित हैं।
 * अंतर्राष्ट्रीयकरण और स्थानीयकरण के लिए समर्थन अत्यंत आवश्यक है।
 * सी शार्प को होस्ट किए गए और अंतः स्थापित प्रणाली दोनों के लिए एप्लिकेशन लिखने के लिए उपयुक्त बनाया गया है, जो बहुत बड़े से लेकर बहुत कम समर्पित कार्यों के लिए परिष्कृत ऑपरेटिंग सिस्टम का उपयोग करते हैं।
 * यद्यपि सी शार्प अनुप्रयोगों का उद्देश्य स्मृति और प्रसंस्करण शक्ति आवश्यकताओं के संबंध में किफायती होना है, भाषा का उद्देश्य C या असेंबली भाषा के साथ प्रदर्शन और आकार पर सीधे प्रतिस्पर्धा करना नहीं था।

इतिहास
डॉटनेट फ्रेमवर्क के विकास के समय, बेस क्लास लाइब्रेरी मूल रूप से सिंपल मैनेज्ड C (एसएमसी) नामक एक प्रबंधित कोड कंपाइलर प्रणाली का उपयोग करके लिखी गई थी। जनवरी 1999 में, एंडर्स हेजल्सबर्ग ने कूल नामक एक नई भाषा बनाने के लिए एक टीम बनाई, जो  सी की तरह ऑब्जेक्ट ओरिएंटेड भाषा थी। माइक्रोसॉफ्ट ने कूल नाम को, भाषा के अंतिम नाम के रूप में रखने पर विचार किया था, परंतु ट्रेडमार्क कारणों से ऐसा नहीं करने का फैसला किया। जुलाई 2000 के व्यवसायी विकासक सम्मेलन में डॉटनेट परियोजना की सार्वजनिक घोषणा के समय तक, भाषा का नाम बदलकर सी शार्प कर दिया गया था, और क्लास लाइब्रेरी और एएसपीडॉटनेट रनटाइम को सी शार्प में स्थानांतरित कर दिया गया था।

हेज्ल्सबर्ग माइक्रोसॉफ्ट में सी शार्प के प्रमुख प्रारूपक और प्रमुख वास्तुकार हैं, और पहले भी टर्बो पास्कल, एम्बरकैडेरो डेल्फ़ी (पूर्व में कोडगियर डेल्फ़ी, इनप्राइज़ डेल्फ़ी और बोर्लैंड डेल्फ़ी), तथा विसुअल J++ के प्रारूपण में सम्मिलित थे। उन्होंने साक्षात्कारों और तकनीकी पत्रों में इसके बारे में कहा है कि प्रमुख प्रोग्रामिंग भाषाओं (जैसे C++, जावा, डेल्फी और स्मॉलटॉक) में दोष कारण साबित हुए हैं, जिनके परिणामस्वरूप सामान्य भाषा रनटाइम (CLR) की मूलभूत तत्वों को चलाना पड़ा, जो फिर सी शार्प भाषा के प्रारूप को चलाने में सहायता करता है।

जेम्स गॉस्लिंग, जिन्होंने 1994 में जावा प्रोग्रामिंग भाषा को बनाया था, और बिल जॉय, सन माइक्रोसिस्टम्स के सहसंस्थापक, जो जावा के जनक हैं, ने सीशार्प को जावा का "नकल" कहा है; गॉस्लिंग ने इसके आगे भी कहा है कि "[सी शार्प] जावा जैसा ही है, बस इसमे से विश्वसनीयता, उत्पादकता और सुरक्षा को हटा दिया गया है। क्लाउस क्रेफ्ट और एंजेलिका लैंगर (C++ स्ट्रीम बुक के लेखक) ने एक ब्लॉग लेख में कहा कि जावा और सी शार्प लगभग समान प्रोग्रामिंग भाषा हैं। उनका कहना है की इस प्रोग्रामिंग भाषा में उबाऊ दोहराव है तथा नवीनता का अभाव है, संभवतः ही कोई यह दावा करेगा कि जावा या सी शार्प क्रांतिकारी प्रोग्रामिंग भाषा हैं, जिन्होंने हमारे प्रोग्राम लिखने के तरीके को परिवर्तित कर दिया, और सी शार्प ने जावा से बहुत कुछ उधार लिया। अब जब सी शार्प बॉक्सिंग और अनबॉक्सिंग का समर्थन करता है, तो हमारे पास जावा में एक ऐसी ही समान सुविधा होगी। जुलाई 2000 में, हेजल्सबर्ग ने कहा कि सी शार्प, जावा का क्लोन नहीं है और यह प्रारूप में सी ++ के अत्यधिक निकट है।

नवंबर 2005 में सी शार्प 2.0 के विमोचित होने के बाद से, सी शार्प और जावा भाषाएँ तेजी से अलग-अलग प्रक्षेपवक्रों पर विकसित हुई हैं, तथा दो बिल्कुल भिन्न भाषाएँ बन गई हैं। दोनों भाषाओं में जनेरिक्स के सम्मिलन से पहले पहला प्रमुख विभाजन आया, जिसमें विभिन्न तरीकों से कार्यान्वयन किया गया। सी शार्प उपयोग में पुनःकरण करता है जिससे "प्रथम-श्रेणी" जनेरिक ऑब्जेक्ट प्रदान कर सके, जो किसी अन्य वर्ग की तरह उपयोग किए जा सकते हैं, जिसमें कोड उत्पन्नन समय पर वर्ग लोड होने पर किया जाता है।

इसके अतिरिक्त, सी शार्प ने कार्यात्मक-शैली प्रोग्रामिंग को समायोजित करने के लिए कई प्रमुख विशेषताओं को जोड़ा है, जो सी शार्प 3.0 के साथ जारी भाषा एकीकृत क्वेरी विस्तार विधि इसके फलन, प्रवर्द्धन विधियों और अज्ञात प्रकारों के सहायक संरचना में समाप्त हो गया है। ये सुविधाएँ सी शार्प प्रोग्रामर को कार्यात्मक प्रोग्रामिंग तकनीकों जैसे क्लोजर का उपयोग करने में सक्षम बनाती हैं, अर्थात यह उनके अनुप्रयोग के लिए लाभप्रद होता है। लिंक प्रवर्द्धन और कार्यात्मक आयात विकासकों को बॉयलरप्लेट कोड की मात्रा को कम करने में सहायता करते हैं जो सामान्य कार्यों में सम्मिलित होता है जैसे डेटाबेस को क्वेरी करना, एक xml फ़ाइल को पार्स करना, या डेटा संरचना के माध्यम से खोज करना, पठनीयता में सुधार करने में सहायता करने के लिए वास्तविक प्रोग्राम लॉजिक पर जोर देना और रख-रखाव आदि।

सीशार्प का एक मास्कॉट अंडी था, जिसका नाम एंडर्स हेज़ल्सबर्ग के नाम पर रखा गया था। यह मास्कॉट 29 जनवरी 2004 को सेवानिवृत्त हो गया था।

सी शार्प को मूल रूप से आइएसओ/आइसीई JTC 1 उपसमिति आइएसओ/आइसीई JTC 1/SC 22 को समीक्षा के लिए प्रस्तुत किया गया था, आईएसओ/आईईसी 23270:2003 के अंतर्गत, वापस ले लिया गया था और फिर आइएसओ/आइसीई 23270:2006 के अंतर्गत अनुमोदित किया गया था। 23270:2006 को 23270:2018 के अंतर्गत वापस ले लिया गया है और इस संस्करण के साथ अनुमोदित किया गया है।

नाम
माइक्रोसॉफ्ट ने पहली बार 1988 में वृद्धिशील संकलन के लिए डिज़ाइन की गई C भाषा के एक संस्करण के लिए सी शार्प नाम का उपयोग किया था। वह परियोजना पूरी नहीं हुई थी, और बाद में नाम का पुन: उपयोग किया गया।

"सी शार्प" (C#) नाम संगीतीय लिखावट से प्रेरित हुआ है, जहां एक शार्प प्रतीक दिखाता है कि लिखी गई संगीतीय नोट को एक सेमीटोन ऊंची स्वर में परिवर्तित किया जाना चाहिए। यह C++ के भाषा नाम के समान है, जहां ++ इंगित करता है कि मूल्यांकन किए जाने के बाद एक चर को 1 से बढ़ाया जाना चाहिए। शार्प प्रतीक भी चार + प्रतीकों (दो-दो-दो समूह में) के टाइपोग्राफिक संयुक्ताक्षर जैसा दिखता है, जिसका अर्थ है कि भाषा सी ++ की वृद्धि है।

प्रदर्शन की तकनीकी सीमाओं (मानक फोंट, ब्राउज़र, आदि) के कारण और तथ्य यह है कि शार्प प्रतीक अधिकांश कीबोर्ड लेआउट पर उपलब्ध नहीं है, संख्या चिह्न  प्रोग्रामिंग भाषा के लिखित नाम में शार्प प्रतीक का अनुमान लगाने के लिए चुना गया था। यह सम्मेलन एकमा-334 सी शार्प भाषा विशिष्टता में परिलक्षित होता है।

शार्प प्रत्यय का उपयोग कई अन्य डॉटनेट भाषाओं द्वारा किया गया है जो मौजूदा भाषाओं के संस्करण हैं, जिनमें जे शार्प (एक डॉटनेट भाषा भी माइक्रोसॉफ्ट द्वारा डिज़ाइन की गई है जो जावा 1.1 से ली गई है), ए शार्प (एडा प्रोग्रामिंग भाषा) से), और कार्यात्मक प्रोग्रामिंग भाषा एफ शार्प (एफ #) सम्मिलित है। डॉटनेट के लिए आईफेल का मूल अनुप्रयोग एफिल शार्प के रूप में था, एक नाम जिसे अब वापस ले लिया गया है क्योंकि अब पूर्ण एफिल भाषा का समर्थन होता है। लाइब्रेरी के लिए भी प्रत्यय का उपयोग किया गया है, जैसे कि Gtk# (जीटीके और अन्य जीनोम लाइब्रेरी के लिए डॉटनेट रैपर पैटर्न) और Cocoa# (कोको के लिए एक रैपर)।

वाक्य-रचना
सी शार्प भाषा की मूल वाक्य-रचना अन्य C-शैली भाषाओं जैसे C, C++ और जावा के समान है, विशेष रूप से:


 * अर्धविराम का उपयोग किसी कथन के अंत को दर्शाने के लिए किया जाता है।
 * घुंघराले कोष्ठक, वाक्यांशों को समूहीकृत करने के लिए उपयोग किए जाते हैं। स्टेटमेंट को संभवतः मेथड्स, मेथड्स को क्लासेस और क्लासेस को नेमस्पेस में समूहीकृत किया जाता है।
 * चरों को एक बराबर चिह्न का उपयोग करके निर्दिष्ट किया जाता है, परंतु == का उपयोग करके तुलना करने के लिए किया जाता है।
 * वर्ग कोष्ठक का उपयोग सरणी डेटा संरचना के साथ किया जाता है, दोनों को घोषित करने के लिए और उनमें से किसी एक में दिए गए सूचकांक का मान प्राप्त करने के लिए किया जाता है।

विविक्तिकर विशेषताएं
सी शार्प की कुछ उल्लेखनीय विशेषताओ का उल्लेख नीचे किया गया है जो इसे सी, सी ++ और जावा से अलग करती हैं:

सुवाह्यता
प्रारूप के अनुसार, सी शार्प प्रोग्रामिंग भाषा है जो अंतर्निहित सामान्य भाषा अवसंरचना को सीधे तौर पर दर्शाती है। इसके अधिकांश आंतरिक प्रकार सीएलआई संरचना द्वारा कार्यान्वित मूल्य-प्रकारों के अनुरूप हैं। यद्यपि, भाषा विनिर्देश संकलक की कोड जनरेशन आवश्यकताओं को नहीं बताता है: अर्थात, यह नहीं बताता है कि सी शार्प कंपाइलर को सामान्य भाषा रनटाइम को लक्षित करना चाहिए, या सामान्य मध्यवर्ती भाषा उत्पन्न करना चाहिए, या कोई अन्य विशिष्ट प्रारूप उत्पन्न करना चाहिए। सैद्धांतिक रूप से, एक सी शार्प कंपाइलर सी ++ या फोरट्रान के पारंपरिक कंपाइलर्स जैसे यंत्र कोड उत्पन्न कर सकता है।

टाइपिंग
सी शार्प कीवर्ड के साथ दृढ़ता से टाइप किए गए परिवर्तनीय घोषणाओं का दृढ़ता से समर्थन करता है, और कीवर्ड के साथ निहित रूप से टाइप की गई सरणियाँ   एक संग्रह प्रारंभकर्ता द्वारा समर्थित होती है।

सी शार्प सख्त बूलियन डेटा प्रकार का समर्थन करता है,. घोषणा जो शर्तों को प्ररूपित करते हैं, जैसे  और , को लागू करने वाले प्रकार की अभिव्यक्ति की आवश्यकता होती है   संक्रिया, जैसे बूलियन प्रकार का अत्यधिक उपयोग किया जाता है। जबकि C++ में एक बूलियन प्रकार भी है, इसे पूर्णांकों और भावों से मुक्त रूप से परिवर्तित किया जा सकता है   केवल उसी की आवश्यकता है   बूल में परिवर्तनीय है,  एक int, को एक सूचक होने के लिए अनुमति देता है । सी शार्प इस पूर्णांक अर्थ को सही या गलत दृष्टिकोण से अस्वीकार करता है, इस आधार पर कि प्रोग्रामर को उन अभिव्यक्तियों का उपयोग करने के लिए मजबूर किया जाता है जो बिल्कुल वापस आते हैं।   कुछ प्रकार की प्रोग्रामिंग गलतियों को रोक सकता है जैसे

सी शार्प सी ++ की तुलना में अधिक प्रकार की सुरक्षा है। डिफ़ॉल्ट रूप से केवल अंतर्निहित रूपांतरण वे हैं जिन्हें सुरक्षित माना जाता है, जैसे पूर्णांकों का विस्तार। यह संकलन-समय पर, जस्ट-इन-टाइम संकलन के दौरान, और कुछ परिस्थितियों में में, रनटाइम पर लागू होता है। बूलियन्स और पूर्णांकों के बीच कोई अंतर्निहित रूपांतरण नहीं होता है, न ही गणना सदस्यों और पूर्णांकों के बीच (शाब्दिक 0 को छोड़कर, जिसे किसी भी गणना प्रकार में परिवर्तित किया जा सकता है)। किसी भी उपयोगकर्ता-परिभाषित रूपांतरण को स्पष्ट रूप से स्पष्ट या अंतर्निहित के रूप में चिह्नित किया जाना चाहिए, सी ++ कॉपी कंस्ट्रक्टर  और रूपांतरण संक्रियाओं के विपरीत, जो दोनों डिफ़ॉल्ट रूप से अंतर्निहित हैं।

सी शार्प में सामान्य प्रकारों में सहप्रसरण और प्रतिप्रसरण के लिए स्पष्ट समर्थन है, C++ के विपरीत, जिसमें आभासी पद्धतियों पर केवल रिटर्न प्रकारों के सिमेंटिक्स के माध्यम से प्रतिप्रसरण के लिए कुछ सीमा तक समर्थन है।

प्रगणित प्रकार के सदस्यों को उनके अपने सीमा में रखा जाता है।

सी शार्प भाषा वैश्विक चर या कार्यों की अनुमति नहीं देती है। कक्षाओं के भीतर सभी विधियों और सदस्यों को घोषित किया जाना चाहिए। सार्वजनिक वर्गों के स्थिर सदस्य वैश्विक चर और कार्यों के लिए स्थानापन्न कर सकते हैं।

स्थानीय चर C और C ++ के विपरीत, एनक्लोजिंग खंड के चर शैडोइंग चर नहीं हो सकते हैं।

मेटाप्रोग्रामिंग
मेटाप्रोग्रामिंग को कई तरीकों से हासिल किया जा सकता है:


 * चिंतनशील प्रोग्रामिंग डॉटनेट API के माध्यम से समर्थित है, जो टाइप मेटाडेटा निरीक्षण और डायनेमिक विधि मंगलाचरण जैसे परिदृश्यों को सक्षम करता है।
 * अभिव्यक्ति ट्री एक सार वाक्य रचना ट्री के रूप में कोड का प्रतिनिधित्व करते हैं, जहां प्रत्येक शीर्ष एक अभिव्यक्ति है जिसे निरीक्षण या निष्पादित किया जा सकता है। यह रनटाइम पर निष्पादन योग्य कोड के गतिशील संशोधन को सक्षम करता है। अभिव्यक्ति ट्री भाषा में कुछ समरूपता का परिचय देते हैं।
 * एट्रिब्यूट मेटाडेटा हैं जिन्हें जावा एनोटेशन के समतुल्य प्रकार, सदस्यों या संपूर्ण असेंबली से जोड़ा जा सकता है। विशिष्ट संकलक और प्रतिबिंब के माध्यम से कोड दोनों के लिए सुलभ हैं। कई मूल विशेषताएँ जीसीसी और विजुअलसी++ के प्लेटफ़ॉर्म-निर्भर प्रीप्रोसेसर निर्देशों की कार्यक्षमता की नकल करती हैं।
 * नामस्थान, जिसमें रनटाइम सिस्टम पर मेटाडेटा और कॉमन इंटरमीडिएट भाषा (टाइप, असेंबली, आदि) उत्सर्जित करने वाली कक्षाएं सम्मिलित हैं।
 * रोसलिन, डॉटनेट कम्पाइलर प्लेटफॉर्म भाषा संकलन सेवाओं के लिए एपीआई प्रयोग प्रदान करता है, जिससे डॉटनेट अनुप्रयोगों के भीतर से सी# कोड के संकलन की अनुमति मिलती है। यह कोड के सिंटैक्टिक (लेक्सिकल विश्लेषण) विश्लेषण, सिमेंटिक विश्लेषण, सीआईएल के लिए गतिशील संकलन और कोड उत्सर्जन के लिए एपीआई को उजागर करता है।
 * स्रोत जनरेटर, रोसलिन सी शार्प कंपाइलर की एक विशेषता, संकलन समय मेटाप्रोग्रामिंग को सक्षम करती है। संकलन प्रक्रिया के दौरान, डेवलपर्स संकलक के एपीआई के साथ संकलित किए जा रहे कोड का निरीक्षण कर सकते हैं और अतिरिक्त उत्पन्न सी शार्प स्रोत कोड को संकलित करने के लिए पास कर सकते हैं।

विधियाँ और कार्य
सी शार्प में एक विधि एक वर्ग का सदस्य है जिसे कक्षा संपत्ति की मूल्य-धारण क्षमता के बजाय फ़ंक्शन (निर्देशों का अनुक्रम) के रूप में बुलाया जा सकता है। वाक्य-रचना की दृष्टि से समान अन्य भाषाओं में, जैसे कि C++ और ANSI C, विधि का हस्ताक्षर एक घोषणा है जिसमें क्रम में सम्मिलित हैं: कोई भी वैकल्पिक अभिगम्यता खोजशब्द (जैसे ), इसके वापसी प्रकार का स्पष्ट विनिर्देश (जैसे , या कीवर्ड   यदि कोई मान नहीं लौटाया जाता है), विधि का नाम, और अंत में, अल्पविराम से अलग किए गए पैरामीटर विनिर्देशों का एक कोष्ठक अनुक्रम, प्रत्येक में एक पैरामीटर का प्रकार, उसका औपचारिक नाम और वैकल्पिक रूप से, जब भी कोई भी प्रदान नहीं किया जाता है, तो एक डिफ़ॉल्ट मान होता है। कुछ विशिष्ट प्रकार की विधियाँ, जैसे कि वे जो केवल वापसी मूल्य या असाइनमेंट द्वारा एक वर्ग संपत्ति प्राप्त या सेट करती हैं, को पूर्ण हस्ताक्षर की आवश्यकता नहीं होती है, लेकिन सामान्य स्थिति में, एक वर्ग की परिभाषा में इसके तरीकों की पूर्ण हस्ताक्षर घोषणा सम्मिलित होती है।

सी ++ की तरह, और जावा के विपरीत, सी शार्प प्रोग्रामर को स्कोप संशोधक कीवर्ड का उपयोग करना चाहिए  विधियों को उपवर्गों द्वारा ओवरराइड करने की अनुमति देने के लिए। सी शार्प में एक्सटेंशन विधियां प्रोग्रामर को स्थिर विधियों का उपयोग करने की अनुमति देती हैं जैसे कि वे कक्षा की विधि तालिका से विधियां थीं, जिससे प्रोग्रामर किसी ऑब्जेक्ट में विधियों को जोड़ सकते हैं जो उन्हें लगता है कि उस ऑब्जेक्ट और उसके डेरिवेटिव्स पर मौजूद होना चाहिए।

प्ररूप  रन-टाइम मेथड बाइंडिंग की अनुमति देता है, जावास्क्रिप्ट जैसी मेथड कॉल और रन-टाइम ऑब्जेक्ट कंपोज़िशन की अनुमति देता है।

सी शार्प में कीवर्ड के माध्यम से दृढ़ता से टाइप किए गए समारोह सूचक के लिए समर्थन है. क्यूटी संरचना के छद्म-सी ++ सिग्नल और स्लॉट की तरह, सी शार्प में विशेष रूप से प्रकाशन-सदस्यता शैली की घटनाओं के आसपास शब्दार्थ है, यद्यपि सी शार्प ऐसा करने के लिए प्रतिनिधियों का उपयोग करता है।

सी शार्प जावा-जैसी पेशकश करता है  विधि कॉल, विशेषता के माध्यम से , और म्युचुअल एक्सक्लूज़न|कीवर्ड के माध्यम से परस्पर-अनन्य लॉक के लिए समर्थन करता है.

संपत्ति
सी शार्प संपत्ति के साथ कक्षाओं का समर्थन करता है। गुण एक बैकिंग फ़ील्ड के साथ सरल एक्सेसर फ़ंक्शन हो सकते हैं, या गेट्टर और सेटर फ़ंक्शन लागू कर सकते हैं।

चूंकि सी शार्प 3.0 ऑटो-कार्यान्वित गुणों की सिंटैक्टिक चीनी उपलब्ध है, जहां म्यूटेटर विधि | एक्सेसर (गेट्टर) और म्यूटेटर (सेटर) एक वर्ग के एकल गुण (कंप्यूटिंग) पर संचालन को इनकैप्सुलेट करते हैं।

नामस्थान
एसी#  जावा के समान कोड अलगाव प्रदान करता है   या एक सी ++, बहुत समान नियमों और सुविधाओं के साथ a. सिंटैक्स का उपयोग करके नामस्थान आयात किए जा सकते हैं।

मेमोरी एक्सेस
C # में, मेमोरी एड्रेस पॉइंटर्स का उपयोग केवल उन ब्लॉकों के भीतर किया जा सकता है जिन्हें विशेष रूप से असुरक्षित के रूप में चिह्नित किया गया है, और असुरक्षित कोड वाले प्रोग्राम को चलाने के लिए उचित अनुमति की आवश्यकता होती है। अधिकांश ऑब्जेक्ट एक्सेस सुरक्षित ऑब्जेक्ट संदर्भों के माध्यम से किया जाता है, जो हमेशा या तो एक लाइव ऑब्जेक्ट की ओर इशारा करते हैं या अच्छी तरह से परिभाषित Nullable प्रकार का मान रखते हैं; एक मृत वस्तु (जिसे कचरा एकत्र किया गया है), या स्मृति के एक यादृच्छिक ब्लॉक के संदर्भ में प्राप्त करना असंभव है। एक असुरक्षित सूचक एक 'अप्रबंधित' मान प्रकार के उदाहरण को इंगित कर सकता है जिसमें कचरा-एकत्रित वस्तुओं, सरणी, स्ट्रिंग, या ढेर-आवंटित स्मृति का कोई संदर्भ नहीं होता है। कोड जो असुरक्षित के रूप में चिह्नित नहीं है, वह अभी भी पॉइंटर्स को स्टोर और मैनिपुलेट कर सकता है  टाइप करें, लेकिन यह उन्हें डीरेफरेंस नहीं कर सकता है।

प्रबंधित मेमोरी को स्पष्ट रूप से मुक्त नहीं किया जा सकता है; इसके बजाय, यह स्वचालित रूप से कचरा एकत्र किया जाता है। कचरा संग्रह मेमोरी लीक की समस्या को संबोधित करता है, प्रोग्रामर को मेमोरी जारी करने की जिम्मेदारी से मुक्त करता है जिसकी अब ज्यादातर परिस्थितियों में में आवश्यकता नहीं होती है। कोड जो आवश्यक से अधिक समय तक वस्तुओं के संदर्भों को बनाए रखता है, अभी भी आवश्यकता से अधिक मेमोरी उपयोग का अनुभव कर सकता है, यद्यपि एक बार किसी वस्तु का अंतिम संदर्भ जारी होने के बाद मेमोरी कचरा संग्रह के लिए उपलब्ध होती है।

अपवाद
प्रोग्रामर के लिए कई मानक अपवाद उपलब्ध हैं। मानक लाइब्रेरीों में विधियाँ नियमित रूप से कुछ परिस्थितियों में सिस्टम अपवादों को फेंकती हैं और फेंके गए अपवादों की श्रेणी को सामान्य रूप से प्रलेखित किया जाता है। कस्टम अपवाद वर्गों को उन वर्गों के लिए परिभाषित किया जा सकता है जो आवश्यकतानुसार विशेष परिस्थितियों के लिए संचालन की अनुमति देते हैं। चेक किए गए अपवाद सी शार्प (जावा के विपरीत) में मौजूद नहीं हैं। यह स्केलेबिलिटी और वर्जनेबिलिटी के मुद्दों पर आधारित एक सचेत निर्णय रहा है।

बहुरूपता
सी ++ के विपरीत, सी शार्प एकाधिक विरासत का समर्थन नहीं करता है, यद्यपि एक वर्ग किसी भी संख्या में प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) (पूरी तरह सार वर्ग) को कार्यान्वित कर सकता है। यह जटिलता से बचने और पूरे सीएलआई में वास्तुशिल्प आवश्यकताओं को सरल बनाने के लिए भाषा के प्रमुख वास्तुकार द्वारा एक डिजाइन निर्णय था।

जावा के समान, एक ही नाम के साथ एक विधि वाले कई इंटरफेस को लागू करते समय और एक ही प्रकार के मापदंडों को एक ही क्रम (अर्थात एक ही प्रकार के हस्ताक्षर) में लेते हुए, सी शार्प सभी इंटरफेस को कवर करने के लिए एक ही विधि दोनों की अनुमति देता है और यदि आवश्यक हो तो प्रत्येक इंटरफ़ेस के लिए विशिष्ट तरीके।

यद्यपि, जावा के विपरीत, सी शार्प ऑपरेटर ओवरलोडिंग का समर्थन करता है।

भाषा एकीकृत क्वेरी (LINQ)
सी शार्प में डॉटनेट फ्रेमवर्क के माध्यम से भाषा इंटीग्रेटेड क्वेरी का उपयोग करने की क्षमता है। एक डेवलपर विभिन्न प्रकार के डेटा स्रोतों को क्वेरी कर सकता है, बशर्ते  इंटरफ़ेस ऑब्जेक्ट पर लागू किया गया है। इसमें XML दस्तावेज़, ADOडॉटनेट डेटासेट और SQL डेटाबेस सम्मिलित हैं। सी शार्प में LINQ का उपयोग करने से इंटेलिजेंट कोड पूर्ण समर्थन, मजबूत फ़िल्टरिंग क्षमताएं, संकलन त्रुटि जांच क्षमता के साथ प्रकार की सुरक्षा, और विभिन्न स्रोतों पर डेटा पूछताछ के लिए स्थिरता जैसे फायदे मिलते हैं। कई अलग-अलग भाषा संरचनाएं हैं जिनका उपयोग C # और LINQ के साथ किया जा सकता है और वे क्वेरी एक्सप्रेशन, लैम्ब्डा एक्सप्रेशन, अनाम प्रकार, निहित रूप से टाइप किए गए चर, एक्सटेंशन मेथड और ऑब्जेक्ट इनिशियलाइज़र हैं। LINQ के दो सिंटैक्स हैं: क्वेरी सिंटैक्स और मेथड सिंटैक्स। यद्यपि, कंपाइलर हमेशा क्वेरी सिंटैक्स को कंपाइल समय पर मेथड सिंटैक्स में परिवर्तित करता है।

कार्यात्मक प्रोग्रामिंग
यद्यपि मुख्य रूप से एक अनिवार्य भाषा, सी शार्प हमेशा समय के साथ कार्यात्मक विशेषताएं जोड़ती है, उदाहरण के लिए:


 * प्रथम श्रेणी का कार्य | प्रथम श्रेणी के नागरिक के रूप में कार्य - सी शार्प 1.0 प्रतिनिधि
 * उच्च-क्रम कार्य | उच्च-क्रम कार्य - सी शार्प 1.0 एक साथ प्रतिनिधियों के साथ
 * बेनामी फ़ंक्शन - सी शार्प 2 अनाम प्रतिनिधि और सी शार्प 3 लैम्ब्डा एक्सप्रेशन
 * क्लोजर (कंप्यूटर प्रोग्रामिंग) - सी शार्प 2 एक साथ गुमनाम प्रतिनिधियों के साथ और सी शार्प 3 एक साथ लैम्ब्डा एक्सप्रेशन के साथ * अनुमान टाइप करें - सी शार्प 3 निहित रूप से टाइप किए गए स्थानीय चर के साथ और सी शार्प 9 लक्ष्य-टाइप किए गए नए भाव
 * सूची समझ - सी शार्प 3 LINQ
 * Tuple - डॉटनेट फ्रेमवर्क 4.0 लेकिन यह लोकप्रिय हो गया जब सी शार्प 7.0 ने भाषा समर्थन के साथ एक नया टपल प्रकार पेश किया
 * नेस्टेड फ़ंक्शन - सी शार्प 7.0 * पैटर्न मैचिंग - सी शार्प 7.0 * अपरिवर्तनीय वस्तु - सी शार्प 7.2 केवल पढ़ने के लिए संरचना सी शार्प 9 रिकॉर्ड प्रकार और इनिट केवल बसता है
 * टाइप क्लास - सी शार्प 12 भूमिकाएं/एक्सटेंशन (विकास में )

सामान्य प्रकार प्रणाली
सी शार्प में एक एकीकृत प्रकार प्रणाली है। इस यूनिफाइड टाइप सिस्टम को कॉमन टाइप सिस्टम (CTS) कहा जाता है।

एक एकीकृत प्रकार प्रणाली का अर्थ है कि पूर्णांक जैसे आदिम सहित सभी प्रकार, के उपवर्ग हैं कक्षा। उदाहरण के लिए, प्रत्येक प्रकार को विरासत में मिला है  तरीका।

डेटा प्रकार की श्रेणियाँ
सीटीएस डेटा प्रकारों को दो श्रेणियों में विभाजित करता है:


 * 1) संदर्भ प्रकार
 * 2) मूल्य प्रकार

मूल्य प्रकारों के उदाहरणों में न तो संदर्भित पहचान है और न ही संदर्भात्मक तुलना शब्दार्थ। मूल्य प्रकारों के लिए समानता और असमानता की तुलना उदाहरणों के भीतर वास्तविक डेटा मूल्यों की तुलना करती है, जब तक कि संबंधित ऑपरेटरों को अतिभारित न किया जाए। मूल्य प्रकार से प्राप्त होते हैं, हमेशा एक डिफ़ॉल्ट मान होता है, और इसे हमेशा बनाया और कॉपी किया जा सकता है। मूल्य प्रकारों पर कुछ अन्य सीमाएँ हैं कि वे एक दूसरे से प्राप्त नहीं कर सकते हैं (लेकिन इंटरफेस को लागू कर सकते हैं) और एक स्पष्ट डिफ़ॉल्ट (पैरामीटर रहित) निर्माता नहीं हो सकता है क्योंकि उनके पास पहले से ही एक निहित है जो सभी निहित डेटा को प्रकार-निर्भर डिफ़ॉल्ट मान ( 0, शून्य, या समान)। मूल्य प्रकार के उदाहरण सभी आदिम प्रकार हैं, जैसे (एक हस्ताक्षरित 32-बिट पूर्णांक),  (एक 32-बिट IEEE फ़्लोटिंग-प्वाइंट संख्या),  (एक 16-बिट यूनिकोड कोड इकाई), और  (नैनोसेकंड सटीकता के साथ समय में एक विशिष्ट बिंदु की पहचान करता है)। अन्य उदाहरण हैं  (गणना) और  (उपयोगकर्ता परिभाषित संरचनाएं)।

इसके विपरीत, संदर्भ प्रकारों में संदर्भित पहचान की धारणा होती है, जिसका अर्थ है कि संदर्भ प्रकार का प्रत्येक उदाहरण हर दूसरे उदाहरण से स्वाभाविक रूप से भिन्न होता है, भले ही दोनों उदाहरणों में डेटा समान हो। यह संदर्भ प्रकारों के लिए डिफ़ॉल्ट समानता और असमानता की तुलना में परिलक्षित होता है, जो संरचनात्मक समानता के बजाय संदर्भात्मक के लिए परीक्षण करता है, जब तक कि संबंधित ऑपरेटरों को अतिभारित नहीं किया जाता है (जैसे कि मामला ). कुछ ऑपरेशन हमेशा संभव नहीं होते हैं, जैसे संदर्भ प्रकार का उदाहरण बनाना, मौजूदा उदाहरण की प्रतिलिपि बनाना, या दो मौजूदा उदाहरणों पर मूल्य तुलना करना। यद्यपि विशिष्ट संदर्भ प्रकार एक सार्वजनिक कंस्ट्रक्टर को उजागर करके या संबंधित इंटरफ़ेस को लागू करके ऐसी सेवाएं प्रदान कर सकते हैं (जैसे या ). संदर्भ प्रकार के उदाहरण हैं (अन्य सभी सी शार्प कक्षाओं के लिए अंतिम आधार वर्ग),  (यूनिकोड वर्णों की एक स्ट्रिंग), और  (सभी सी शार्प सरणियों के लिए एक आधार वर्ग)।

दोनों प्रकार की श्रेणियां उपयोगकर्ता-परिभाषित प्रकारों के साथ एक्स्टेंसिबल हैं।

बॉक्सिंग और अनबॉक्सिंग
बॉक्सिंग एक मान-टाइप ऑब्जेक्ट को संबंधित रेफरेंस टाइप के मान में बदलने की प्रक्रिया है। सी शार्प में बॉक्सिंग निहित है।

अनबॉक्सिंग एक संदर्भ प्रकार (पहले बॉक्सिंग) के मान को मान प्रकार के मान में परिवर्तित करने की प्रक्रिया है। सी शार्प में अनबॉक्सिंग के लिए एक स्पष्ट प्रकार रूपांतरण की आवश्यकता होती है। प्रकार टी का एक बॉक्सिंग ऑब्जेक्ट केवल टी (या एक शून्य टी) के लिए अनबॉक्स किया जा सकता है। उदाहरण:

लाइब्रेरी
सी शार्प विनिर्देशन प्रकार और कक्षा लाइब्रेरीों के न्यूनतम सेट का विवरण देता है जो संकलक उपलब्ध होने की अपेक्षा करता है। व्यवहार में, सी शार्प का उपयोग अक्सर कॉमन भाषा इन्फ्रास्ट्रक्चर (CLI) के कुछ कार्यान्वयन के साथ किया जाता है, जिसे एकमा-335 कॉमन भाषा इन्फ्रास्ट्रक्चर (CLI) के रूप में मानकीकृत किया जाता है।

मानक सीएलआई विनिर्देशों के अलावा, कई वाणिज्यिक और सामुदायिक वर्ग लाइब्रेरी हैं जो अतिरिक्त कार्यक्षमता प्रदान करने के लिए डॉटनेट फ्रेमवर्क लाइब्रेरीों के शीर्ष पर निर्मित होते हैं। सी शार्प डॉटनेट लाइब्रेरी और फ्रेमवर्क की सूची में सम्मिलित किसी भी लाइब्रेरी को कॉल कर सकता है।

हैलो वर्ल्ड
निम्नलिखित एक बहुत ही सरल सी शार्प प्रोग्राम है, सी शार्प 9 में पेश किए गए शीर्ष-स्तरीय स्टेटमेंट फीचर का उपयोग करते हुए क्लासिक हैलो वर्ल्ड उदाहरण का एक संस्करण:

सी शार्प 8 या उससे कम के रूप में लिखे गए कोड के लिए, किसी प्रोग्राम के प्रवेश बिंदु तर्क को मुख्य विधि में एक प्रकार के अंदर लिखा जाना चाहिए:

यह कोड इस पाठ को कंसोल विंडो में प्रदर्शित करेगा:

हैलो वर्ल्ड!

प्रत्येक पंक्ति का एक उद्देश्य है:

उपरोक्त पंक्ति सभी प्रकार के आयात करती है  नाम स्थान। उदाहरण के लिए, द   स्रोत कोड में बाद में प्रयुक्त वर्ग में परिभाषित किया गया है   नामस्थान, जिसका अर्थ है कि इसका उपयोग प्रकार के पूर्ण नाम की आपूर्ति के बिना किया जा सकता है जिसमें नामस्थान सम्मिलित है।

यह पंक्ति एक टिप्पणी है; यह प्रोग्रामर के लिए कोड का वर्णन और दस्तावेज करता है। ऊपर के लिए एक वर्ग परिभाषा है कक्षा। ब्रेसिज़ की जोड़ी के बीच आने वाली हर चीज़ उस वर्ग का वर्णन करती है। घुंघराले कोष्ठक एक कोड ब्लॉक की सीमाओं का सीमांकन करते हैं। इस पहले उदाहरण में, वे प्रारंभ और अंत को चिह्नित कर रहे हैं  कक्षा। यह क्लास मेंबर मेथड की घोषणा करता है जहां प्रोग्राम का निष्पादन शुरू होता है। डॉटनेट रनटाइम कॉल करता है विधि जावा  के विपरीत,  विधि की आवश्यकता नहीं है  कीवर्ड, जो कंपाइलर को बताता है कि विधि को किसी भी वर्ग द्वारा कहीं से भी कॉल किया जा सकता है। लिखना  लिखने के बराबर है. मेथड स्टेटिक मेथड्स इंस्टेंस के बिना मेथड को एक्सेसिबल बनाता है. प्रत्येक कंसोल एप्लिकेशन का प्रवेश बिंदु घोषित किया जाना चाहिए  अन्यथा कार्यक्रम को एक उदाहरण की आवश्यकता होगी, लेकिन किसी भी उदाहरण के लिए प्रोग्राम की आवश्यकता होगी। उस अघुलनशील सर्कुलर निर्भरता से बचने के लिए, सी शार्प कंपाइलर प्रोसेसिंग सांत्वना आवेदन (जैसे ऊपर) एक त्रुटि की रिपोर्ट करते हैं यदि कोई नहीं है  तरीका। वह  कीवर्ड यह घोषित करता है  का कोई रिटर्न मान नहीं है।

यह लाइन आउटपुट लिखती है। में एक स्थिर वर्ग है  नामस्थान। यह कंसोल एप्लिकेशन के लिए मानक इनपुट, आउटपुट और त्रुटि स्ट्रीम के लिए एक इंटरफ़ेस प्रदान करता है। प्रोग्राम कॉल करता है  तरीका, जो कंसोल पर तर्क, स्ट्रिंग के साथ एक रेखा प्रदर्शित करता है.

जीयूआई
एक विंडोज़ जीयूआई उदाहरण:

यह उदाहरण पिछले उदाहरण के समान है, सिवाय इसके कि यह एक संवाद बकस  उत्पन्न करता है जिसमें हैलो, वर्ल्ड! इसे कंसोल पर लिखने के बजाय।

छवियां
एक अन्य उपयोगी लाइब्रेरी है  लाइब्रेरी, जिसका उपयोग प्रोग्रामेटिक रूप से चित्र बनाने के लिए किया जाता है। उदाहरण के लिए;

सार्वजनिक वर्ग उदाहरण{ सार्वजनिक स्थिर छवि img;

स्थिर शून्य मुख्य {       आईएमजी = Image.FromFile("Image.png);    } इससे एक छवि बनेगी जो "Image.png" में संग्रहीत छवि के समान होगी।

मानकीकरण और लाइसेंसिंग
अगस्त 2001 में, माइक्रोसॉफ्ट, ह्यूलेट-पैकर्ड और इंटेल ने सी शार्प के साथ-साथ सामान्य भाषा इन्फ्रास्ट्रक्चर के लिए मानक संगठन एक्मा इंटरनेशनल को विनिर्देशों को प्रस्तुत करने के लिए सह-प्रायोजित किया। दिसंबर 2001 में, एकमा ने एकमा-334 सी शार्प भाषा विशिष्टता जारी की। सी शार्प 2003 में मानकीकरण/अंतर्राष्ट्रीय इलेक्ट्रोटेक्निकल कमीशन मानक आइएसओ/आइसीई 23270:2003 - सूचना प्रौद्योगिकी - प्रोग्रामिंग भाषाएँ - सी शार्प के लिए एक अंतर्राष्ट्रीय संगठन बन गया। एकमा ने पहले दिसंबर 2002 में सी शार्प के दूसरे संस्करण के रूप में समकक्ष विनिर्देशों को अपनाया था। जून 2005 में, एकमा ने सी शार्प विनिर्देशन के संस्करण 3 को मंजूरी दी और एकमा-334 को अपडेट किया। परिवर्धन में आंशिक वर्ग, अनाम विधियाँ, अशक्त प्रकार और सामान्य प्रोग्रामिंग (कुछ हद तक C ++ टेम्पलेट के समान) सम्मिलित हैं। जुलाई 2005 में, एकमा ने आइएसओ/आइसीई JTC 1/SC 22 को बाद की फास्ट-ट्रैक प्रक्रिया, मानकों और संबंधित टीआर के माध्यम से प्रस्तुत किया। इस प्रक्रिया में सामान्यतः 6-9 महीने लगते हैं।

सी शार्प भाषा की परिभाषा और सामान्य भाषा के आधारभूत संरचना को मानकीकरण के लिए अंतर्राष्ट्रीय संगठन/अंतर्राष्ट्रीय इलेक्ट्रोटेक्निकल कमीशन और एक्मा मानकों के तहत मानकीकृत किया गया है जो उचित और गैर-भेदभावपूर्ण लाइसेंसिंग प्रदान करते हैं। पेटेंट दावों से उचित और गैर-भेदभावपूर्ण लाइसेंसिंग सुरक्षा प्रदान करते हैं।

माइक्रोसॉफ्ट प्रारंभ में ओपन-सोर्स विकासक पर गैर-लाभकारी परियोजनाओं में एकस्व का उल्लंघन करने के लिए ओपन विशिष्टता प्रॉमिस द्वारा कवर किए गए संरचना के भाग के लिए मुकदमा नहीं करने के लिए सहमत हुआ। माइक्रोसॉफ्ट नोवेल के भुगतान करने वाले ग्राहकों के खिलाफ नोवेल उत्पादों से संबंधित एकस्व लागू नहीं करने पर भी सहमत हो गया है उन उत्पादों की सूची के अपवाद के साथ जो स्पष्ट रूप से सी शार्प, डॉटनेट या नोवेल के डॉटनेट मोनो के कार्यान्वयन का उल्लेख नहीं करते हैं। यद्यपि, नोवेल ने कहा कि मोनो किसी भी माइक्रोसॉफ्ट पेटेंट का उल्लंघन नहीं करता है। माइक्रोसॉफ्ट ने चांदनी (रनटाइम) से संबंधित पेटेंट अधिकारों को लागू नहीं करने के लिए एक विशिष्ट समझौता भी किया, जो मोनो पर निर्भर करता है, बशर्ते इसे नोवेल के माध्यम से प्राप्त किया जाए। एक दशक बाद, माइक्रोसॉफ्ट ने सी शार्प के लिए फ्री, ओपन-सोर्स और क्रॉस-प्लेटफ़ॉर्म टूलिंग विकसित करना शुरू किया, अर्थात् विज़ुअल स्टूडियो कोड, डॉटनेट कोर और रोज़लिन आदि। मोनो माइक्रोसॉफ्ट में समरीन, एक माइक्रोसॉफ्ट सहायक कंपनी की एक परियोजना के रूप में सम्मिलित हुआ।

कार्यान्वयन
माइक्रोसॉफ्ट ओपन-सोर्स संदर्भ C# कंपाइलर्स और उपकरणों के विकास में अग्रणी भूमिका निभा रहा है। सबसे पहला कंपाइलर, रॉज़लिन, मध्यवर्ती भाषा में कंपाइल करता है, और दूसरा कंपाइलर, र्यूजिट, एक जस्ट-इन-टाइम कंपाइलर है, जो गतिशील होता है और ऑन-द-फ्लाई अनुकूलन और मध्यवर्ती भाषा को फ़्रंट-एंड सीपीयू के लिए प्राकृतिक कूट में कंपाइल करता है। र्यूजिट विवृत्त स्रोत है और C++ में लिखा गया है। रॉज़लिन पूरी तरह से प्रबंधित कोड (सी शार्प) में लिखा गया है, इसे खोल दिया गया है और एपीआई के रूप में कार्यक्षमता सामने आई है। इस प्रकार यह विकासकों को रीफैक्टरिंग और डायग्नोस्टिक्स टूल बनाने में सक्षम बनाता है। आधिकारिक कार्यान्वयन की दो शाखाएँ हैं डॉटनेट फ्रेमवर्क (क्लोज्ड-सोर्स, केवल विंडोज़) और डॉटनेट कोर (ओपन-सोर्स, क्रॉस-प्लेटफ़ॉर्म); वे अंततः एक ओपन-सोर्स डॉटनेट 5.0 कार्यान्वयन में परिवर्तित हो गए। डॉटनेट फ्रेमवर्क 4.6 में, एक नए जीट कंपाइलर ने पूर्व की जगह ले ली। अन्य सी शार्प कंपाइलर जिनमें से कुछ में सामान्य भाषा इन्फ्रास्ट्रक्चर और डॉटनेट क्लास लाइब्रेरी का कार्यान्वयन सम्मिलित है: यूनिटी अपनी प्राथमिक स्क्रिप्टिंग भाषा के रूप में सी शार्प का उपयोग करती है। गोडोट ने माइक्रोसॉफ्ट से $24,000 के दान के लिए एक वैकल्पिक सी# मॉड्यूल लागू किया है।
 * मोनो, जो माइक्रोसॉफ्ट-प्रायोजित परियोजना है, एक ओपन-सोर्स सी शार्प कंपाइलर प्रदान करती है, सीएलआई का एक पूर्ण ओपन-सोर्स कार्यान्वयन (ईसीएमए विनिर्देश में दिखाई देने वाली आवश्यक रूपरेखा लाइब्रेरीों सहित) और लगभग पूर्ण कार्यान्वयन नेट क्लास लाइब्रेरी डॉटनेट फ्रेमवर्क 3.5 तक समर्थित है।
 * रेमऑब्जेक्ट्स से रेमऑब्जेक्ट्स एलिमेंट्स टूल चेन में रेमऑब्जेक्ट्स सी शार्प सम्मिलित है, जो सी शार्प कोड को डॉटनेट की कॉमन इंटरमीडिएट भाषा, जावा बाइटकोड, कोकोय, दलविक, वेबअसेंबली और विंडोज़, मैकओएस, और लिनक्स के लिए नेटिव यंत्र कोड के लिए कंपाइल करता है।
 * डॉटजीएनयू परियोजना ने एक ओपन-सोर्स सी शार्प कंपाइलर भी प्रदान किया, जो आवश्यक फ्रेमवर्क लाइब्रेरी सहित सामान्य भाषा इन्फ्रास्ट्रक्चर का लगभग पूर्ण कार्यान्वयन है, जैसा कि वे एकमा विनिर्देशन में दिखाई देते हैं, और कुछ शेष माइक्रोसॉफ्ट मालिकाना डॉटनेट का उपसमुच्चय क्लास लाइब्रेरी डॉटनेट 2.0 तक जो एकमा विनिर्देशन में प्रलेखित या सम्मिलित नहीं हैं, लेकिन माइक्रोसॉफ्ट के मानक डॉटनेट फ्रेमवर्क वितरण में सम्मिलित हैं।

यह भी देखें
सी # विषय
 * सी शार्प सिंटैक्स | सी # सिंटैक्स
 * सी शार्प और जावा की तुलना| सी# और जावा की तुलना
 * सी शार्प और विज़ुअल बेसिक .NET की तुलना|C# और विज़ुअल बेसिक .NET की तुलना
 * मानक पुस्तकालय (सीएलआई) | नेट मानक पुस्तकालय

आईडीई
 * विजुअल स्टूडियो
 * माइक्रोसॉफ्ट विजुअल स्टूडियो एक्सप्रेस
 * विजुअल स्टूडियो कोड
 * मोनोडेवलप
 * मोरफिक
 * तेज विकास
 * टर्बो सी शार्प|टर्बो सी#
 * जेटब्रेन # राइडर
 * ज़ामरीन स्टूडियो
 * लिंकपैड

बाहरी संबंध

 * सी शार्प Language Specification
 * सी शार्प Programming Guide
 * ISO सी शार्प Language Specification
 * सी शार्प Compiler Platform ("Roslyn") source code