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

From Vigyanwiki
No edit summary
 
(18 intermediate revisions by 4 users not shown)
Line 40: Line 40:
| wikibooks = C Sharp Programming
| wikibooks = C Sharp Programming
}}
}}
'''{{respell|C|_|शार्प}}''' (सी शार्प){{efn|By convention, a [[number sign]] is used for the second character in normal text; in artistic representations, sometimes a true [[♯|sharp sign]] is used: C♯. However the [[Ecma International|ECMA]] 334 standard states: "The name C# is written as the LATIN CAPITAL LETTER C (U+0043) followed by the NUMBER SIGN # (U+0023)."}} एक सामान्य उद्देश्य की उच्च स्तरीय प्रोग्रामिंग भाषा है, जो कई प्रोग्रामिंग प्रतिमानों का समर्थन करती है। सीशार्प स्थानिक टाइपिंग, मजबूत टाइपिंग, शब्दाक्षरित स्कोप, आदेशात्मक प्रोग्रामिंग, [[ घोषणात्मक प्रोग्रामिंग |घोषणात्मक प्रोग्रामिंग]], [[ कार्यात्मक प्रोग्रामिंग |कार्यात्मक प्रोग्रामिंग]], [[ सामान्य प्रोग्रामिंग |सामान्य प्रोग्रामिंग]][./index.php?title=सी_शार्प_(प्रोग्रामिंग_भाषा)#cite_note-FOOTNOTESkeet2019-17 <span class="mw-reflink-text"><nowiki>[15]</nowiki></span>], आदान-प्रदान-आधारित प्रोग्रामिंग विधियों, ऑब्जेक्ट-ओरिएंटेड ([[कक्षा (कंप्यूटर विज्ञान)|वर्ग-आधारित]]), और घटक-आधारित प्रोग्रामिंग विधियों<ref name="ECMA-334" /> को सम्मिलित करती है।{{rp|4}}
'''{{respell|C|_|शार्प}}''' ('''C#'''){{efn|By convention, a [[number sign]] is used for the second character in normal text; in artistic representations, sometimes a true [[♯|sharp sign]] is used: C♯. However the [[Ecma International|ECMA]] 334 standard states: "The name C# is written as the LATIN CAPITAL LETTER C (U+0043) followed by the NUMBER SIGN # (U+0023)."}} एक सामान्य उद्देश्य की उच्च स्तरीय प्रोग्रामिंग भाषा है, जो कई प्रोग्रामिंग प्रतिमानों का समर्थन करती है। सीशार्प स्थानिक टाइपिंग, मजबूत टाइपिंग, शब्दाक्षरित स्कोप, आदेशात्मक प्रोग्रामिंग, [[ घोषणात्मक प्रोग्रामिंग |घोषणात्मक प्रोग्रामिंग]], [[ कार्यात्मक प्रोग्रामिंग |कार्यात्मक प्रोग्रामिंग]], [[ सामान्य प्रोग्रामिंग |सामान्य प्रोग्रामिंग]], आदान-प्रदान-आधारित प्रोग्रामिंग विधियों, ऑब्जेक्ट-ओरिएंटेड ([[कक्षा (कंप्यूटर विज्ञान)|वर्ग-आधारित]]), और घटक-उन्मुख प्रोग्रामिंग विधियों<ref name="ECMA-334" /> को सम्मिलित करती है।


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


{{As of|November 2022|post=,}} भाषा का सबसे नवीनतम स्थिर सी शार्प संस्करण 11.0 है, जिसे 2022 में .नेट 7.0 में विमोचित किया गया था।<ref>{{Cite web|url=https://devblogs.microsoft.com/dotnet/welcome-to-csharp-11/|title = सी # 11 में आपका स्वागत है|date = November 11, 2022}}</ref><ref>{{Cite web|url=https://devblogs.microsoft.com/dotnet/announcing-net-7/|title = Announcing .NET 7 -- the Fastest .NET Yet|date = November 11, 2022}}</ref>
{{As of|November 2022|post=,}} भाषा का सबसे नवीनतम स्थिर सी शार्प संस्करण 11.0 है, जिसे 2022 में डॉटनेट 7.0 में विमोचित किया गया था।<ref>{{Cite web|url=https://devblogs.microsoft.com/dotnet/welcome-to-csharp-11/|title = सी # 11 में आपका स्वागत है|date = November 11, 2022}}</ref><ref>{{Cite web|url=https://devblogs.microsoft.com/dotnet/announcing-net-7/|title = Announcing .NET 7 -- the Fastest .NET Yet|date = November 11, 2022}}</ref>




Line 56: Line 56:
  |access-date= January 26, 2012
  |access-date= January 26, 2012
}}</ref>
}}</ref>
* भाषा का उद्देश्य एक सरल, आधुनिक, सामान्य-उद्देश्य, वस्तु-उन्मुख प्रोग्रामिंग भाषा होना है।
* प्रोग्रामिंग भाषा का उद्देश्य सरल, आधुनिक, सामान्य-उद्देश्य, वस्तु-उन्मुख प्रोग्रामिंग का समर्थन करना है।
* भाषा और उसके कार्यान्वयन को सॉफ्टवेयर अभियांत्रिकी सिद्धांतों के लिए समर्थन प्रदान करना चाहिए जैसे कि टाइप की जाँच, सरणी सीमा की जाँच,{{sfn|Albahari|2022}}{{rp|58-59}} अप्रारंभीकृत चर, और स्वचालित [[कचरा संग्रह (कंप्यूटर विज्ञान)|संग्रह]] का उपयोग करने के प्रयासों का पता लगाना{{sfn|Albahari|2022}}{{rp|563}} सॉफ़्टवेयर मजबूती, टिकाऊपन और प्रोग्रामर उत्पादकता महत्वपूर्ण हैं।
* भाषा और उसके कार्यान्वयन को सॉफ्टवेयर अभियांत्रिकी सिद्धांतों के लिए समर्थन प्रदान करना चाहिए जैसे कि टाइप की जाँच, सरणी सीमा की जाँच,{{sfn|Albahari|2022}}{{rp|58-59}} अप्रारंभीकृत चर, और स्वचालित [[कचरा संग्रह (कंप्यूटर विज्ञान)|संग्रह]] का उपयोग करने के प्रयासों का पता लगाना{{sfn|Albahari|2022}}{{rp|563}} सॉफ़्टवेयर मजबूती, टिकाऊपन और प्रोग्रामर उत्पादकता को सरल बनाना महत्वपूर्ण हैं।
* भाषा का उद्देश्य वितरित वातावरण में तैनाती पर्यावरण के लिए उपयुक्त सॉफ्टवेयर घटकों के विकास में उपयोग है।
* भाषा का उद्देश्य वितरित वातावरण में पर्यावरण के लिए उपयुक्त सॉफ्टवेयर घटकों के विकास में उपयोग है।
* सॉफ्टवेयर पोर्टेबिलिटी स्रोत कोड प्रोग्रामर के लिए बहुत महत्वपूर्ण है, विशेषतः जो पहले से ही [[सी (प्रोग्रामिंग भाषा)|सी]] और [[सी ++]] से परिचित हैं।
* सॉफ्टवेयर स्थानांतरण स्रोत कोड प्रोग्रामर के लिए अत्यधिक महत्वपूर्ण है, विशेषतः जो पहले से ही [[सी (प्रोग्रामिंग भाषा)|सी]] और [[सी ++]] से परिचित हैं।
* अंतर्राष्ट्रीयकरण और स्थानीयकरण के लिए समर्थन{{sfn|Albahari|2022}}{{rp|314}} अत्यंत आवश्यक है।
* अंतर्राष्ट्रीयकरण और स्थानीयकरण के लिए समर्थन{{sfn|Albahari|2022}}{{rp|314}} अत्यंत आवश्यक है।
* सी शार्प को होस्ट किए गए और [[ अंतः स्थापित प्रणाली |अंतः स्थापित प्रणाली]] दोनों के लिए एप्लिकेशन लिखने के लिए उपयुक्त बनाया गया है, जो बहुत बड़े से लेकर बहुत कम समर्पित कार्यों के लिए परिष्कृत ऑपरेटिंग सिस्टम का उपयोग करते हैं।
* सी शार्प को होस्ट किए गए और [[ अंतः स्थापित प्रणाली |अंतः स्थापित प्रणाली]] दोनों के लिए एप्लिकेशन लिखने के लिए उपयुक्त बनाया गया है, जो बहुत बड़े से लेकर बहुत कम समर्पित कार्यों के लिए परिष्कृत ऑपरेटिंग सिस्टम का उपयोग करते हैं।
Line 66: Line 66:


== इतिहास ==
== इतिहास ==
.नेट फ्रेमवर्क के विकास के समय, [[बेस क्लास लाइब्रेरी]] मूल रूप से सिंपल मैनेज्ड C (एसएमसी) नामक एक प्रबंधित कोड कंपाइलर प्रणाली का उपयोग करके लिखी गई थी।<ref>{{cite web
डॉटनेट फ्रेमवर्क के विकास के समय, [[बेस क्लास लाइब्रेरी]] मूल रूप से सिंपल मैनेज्ड C (एसएमसी) नामक एक प्रबंधित कोड कंपाइलर प्रणाली का उपयोग करके लिखी गई थी।<ref>{{cite web
  |url= https://docs.microsoft.com/en-us/archive/blogs/jasonz/couple-of-historical-facts
  |url= https://docs.microsoft.com/en-us/archive/blogs/jasonz/couple-of-historical-facts
  |title= Couple of Historical Facts
  |title= Couple of Historical Facts
Line 92: Line 92:
  |access-date= October 1, 2008
  |access-date= October 1, 2008
  |archive-url=https://web.archive.org/web/20190518115808/https://www.computerworld.com.au/article/261958/a-z_programming_languages_c_/
  |archive-url=https://web.archive.org/web/20190518115808/https://www.computerworld.com.au/article/261958/a-z_programming_languages_c_/
  |archive-date=18 May 2019 |url-status=dead}}</ref> माइक्रोसॉफ्ट ने कूल नाम को, भाषा के अंतिम नाम के रूप में रखने पर विचार किया था, परंतु ट्रेडमार्क कारणों से ऐसा नहीं करने का फैसला किया। जुलाई 2000 के व्यवसायी विकासक सम्मेलन में .नेट परियोजना की सार्वजनिक घोषणा के समय तक, भाषा का नाम बदलकर सी शार्प कर दिया गया था, और क्लास लाइब्रेरी और एएसपी.नेट रनटाइम को सी शार्प में स्थानांतरित कर दिया गया था।
  |archive-date=18 May 2019 |url-status=dead}}</ref> माइक्रोसॉफ्ट ने कूल नाम को, भाषा के अंतिम नाम के रूप में रखने पर विचार किया था, परंतु ट्रेडमार्क कारणों से ऐसा नहीं करने का फैसला किया। जुलाई 2000 के व्यवसायी विकासक सम्मेलन में डॉटनेट परियोजना की सार्वजनिक घोषणा के समय तक, भाषा का नाम बदलकर सी शार्प कर दिया गया था, और क्लास लाइब्रेरी और एएसपीडॉटनेट रनटाइम को सी शार्प में स्थानांतरित कर दिया गया था।


हेज्ल्सबर्ग माइक्रोसॉफ्ट में सी शार्प के प्रमुख प्रारूपक और प्रमुख वास्तुकार हैं, और पहले भी टर्बो पास्कल, [[Embarcadero Delphi|एम्बरकैडेरो डेल्फ़ी]] (पूर्व में कोडगियर डेल्फ़ी, इनप्राइज़ डेल्फ़ी और बोर्लैंड डेल्फ़ी), तथा विसुअल J++ के प्रारूपण में सम्मिलित थे। उन्होंने साक्षात्कारों और तकनीकी पत्रों में इसके बारे में कहा है कि प्रमुख प्रोग्रामिंग भाषाओं (जैसे C++, जावा, डेल्फी और स्मॉलटॉक) में दोष कारण साबित हुए हैं, जिनके परिणामस्वरूप [[ सामान्य भाषा रनटाइम |सामान्य भाषा रनटाइम]] (CLR) की मूलभूत तत्वों को चलाना पड़ा, जो फिर सी शार्प भाषा के प्रारूप को चलाने में सहायता करता है।<ref>{{Cite web |title=विवरण|url=http://nilsnaegele.com/techreview/Reviews/Details/1 |archive-url=https://web.archive.org/web/20190407173805/http://nilsnaegele.com/techreview/Reviews/Details/1 |archive-date=2019-04-07 |access-date=2019-04-07 |website=nilsnaegele.com}}</ref>
हेज्ल्सबर्ग माइक्रोसॉफ्ट में सी शार्प के प्रमुख प्रारूपक और प्रमुख वास्तुकार हैं, और पहले भी टर्बो पास्कल, [[Embarcadero Delphi|एम्बरकैडेरो डेल्फ़ी]] (पूर्व में कोडगियर डेल्फ़ी, इनप्राइज़ डेल्फ़ी और बोर्लैंड डेल्फ़ी), तथा विसुअल J++ के प्रारूपण में सम्मिलित थे। उन्होंने साक्षात्कारों और तकनीकी पत्रों में इसके बारे में कहा है कि प्रमुख प्रोग्रामिंग भाषाओं (जैसे C++, जावा, डेल्फी और स्मॉलटॉक) में दोष कारण साबित हुए हैं, जिनके परिणामस्वरूप [[ सामान्य भाषा रनटाइम |सामान्य भाषा रनटाइम]] (CLR) की मूलभूत तत्वों को चलाना पड़ा, जो फिर सी शार्प भाषा के प्रारूप को चलाने में सहायता करता है।<ref>{{Cite web |title=विवरण|url=http://nilsnaegele.com/techreview/Reviews/Details/1 |archive-url=https://web.archive.org/web/20190407173805/http://nilsnaegele.com/techreview/Reviews/Details/1 |archive-date=2019-04-07 |access-date=2019-04-07 |website=nilsnaegele.com}}</ref>
Line 130: Line 130:
  | publisher = Microsoft| access-date  = March 21, 2011}}</ref>
  | publisher = Microsoft| access-date  = March 21, 2011}}</ref>


इसके अतिरिक्त, सी शार्प ने कार्यात्मक-शैली प्रोग्रामिंग को समायोजित करने के लिए कई प्रमुख विशेषताओं को जोड़ा है, जो सी शार्प 3.0 के साथ जारी भाषा एकीकृत क्वेरी [[विस्तार विधि]] इसके फलन, प्रवर्द्धन विधियों और अज्ञात प्रकारों के सहायक ढांचे में समाप्त हो गया है।<ref>{{cite web
इसके अतिरिक्त, सी शार्प ने कार्यात्मक-शैली प्रोग्रामिंग को समायोजित करने के लिए कई प्रमुख विशेषताओं को जोड़ा है, जो सी शार्प 3.0 के साथ जारी भाषा एकीकृत क्वेरी [[विस्तार विधि]] इसके फलन, प्रवर्द्धन विधियों और अज्ञात प्रकारों के सहायक संरचना में समाप्त हो गया है।<ref>{{cite web
  | url = http://msdn.microsoft.com/en-us/library/bb308959.aspx
  | url = http://msdn.microsoft.com/en-us/library/bb308959.aspx
  | title = LINQ: .NET Language-Integrated Query|author=Don Box and Anders Hejlsberg
  | title = LINQ: .NET Language-Integrated Query|author=Don Box and Anders Hejlsberg
Line 189: Line 189:
}}</ref> यह सम्मेलन एकमा-334 सी शार्प भाषा विशिष्टता में परिलक्षित होता है।<ref name="ECMA-334" />
}}</ref> यह सम्मेलन एकमा-334 सी शार्प भाषा विशिष्टता में परिलक्षित होता है।<ref name="ECMA-334" />


शार्प प्रत्यय का उपयोग कई अन्य .नेट भाषाओं द्वारा किया गया है जो मौजूदा भाषाओं के संस्करण हैं, जिनमें जे शार्प (एक .नेट भाषा भी माइक्रोसॉफ्ट द्वारा डिज़ाइन की गई है जो जावा 1.1 से ली गई है), ए शार्प ([[एडा (प्रोग्रामिंग भाषा)|एडा प्रोग्रामिंग भाषा)]] से), और कार्यात्मक प्रोग्रामिंग भाषा एफ शार्प (एफ #) सम्मिलित है।<ref name="MS FSharp FAQ">{{cite web
शार्प प्रत्यय का उपयोग कई अन्य डॉटनेट भाषाओं द्वारा किया गया है जो मौजूदा भाषाओं के संस्करण हैं, जिनमें जे शार्प (एक डॉटनेट भाषा भी माइक्रोसॉफ्ट द्वारा डिज़ाइन की गई है जो जावा 1.1 से ली गई है), ए शार्प ([[एडा (प्रोग्रामिंग भाषा)|एडा प्रोग्रामिंग भाषा)]] से), और कार्यात्मक प्रोग्रामिंग भाषा एफ शार्प (एफ #) सम्मिलित है।<ref name="MS FSharp FAQ">{{cite web
  |url=http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/faq.aspx  
  |url=http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/faq.aspx  
  |title=F# FAQ  
  |title=F# FAQ  
Line 210: Line 210:
  |publisher= [[Microsoft]]
  |publisher= [[Microsoft]]
  |access-date= June 18, 2009
  |access-date= June 18, 2009
}}</ref> लाइब्रेरी के लिए भी प्रत्यय का उपयोग किया गया है, जैसे कि Gtk# (जीटीके और अन्य [[GNOME|जीनोम]] लाइब्रेरी के लिए .नेट रैपर पैटर्न) और Cocoa# (कोको के लिए एक रैपर)।
}}</ref> लाइब्रेरी के लिए भी प्रत्यय का उपयोग किया गया है, जैसे कि Gtk# (जीटीके और अन्य [[GNOME|जीनोम]] लाइब्रेरी के लिए डॉटनेट रैपर पैटर्न) और Cocoa# (कोको के लिए एक रैपर)।


=== संस्करण ===
=== संस्करण ===
Line 218: Line 218:
! scope="colgroup" colspan="3" | भाषा विशेषताए
! scope="colgroup" colspan="3" | भाषा विशेषताए
! scope="col" rowspan="2" | दिनांक
! scope="col" rowspan="2" | दिनांक
! scope="col" rowspan="2" | .नेट
! scope="col" rowspan="2" | डॉटनेट
! scope="col" rowspan="2" | [[Visual Studio|विजुअल स्टूडियो]]
! scope="col" rowspan="2" | [[Visual Studio|विजुअल स्टूडियो]]
|-
|-
Line 230: Line 230:
| [http://download.microsoft.com/download/a/9/e/a9e229b9-fee5-4c3e-8476-917dee385062/CSharp%20Language%20Specification%20v1.0.doc January 2002]
| [http://download.microsoft.com/download/a/9/e/a9e229b9-fee5-4c3e-8476-917dee385062/CSharp%20Language%20Specification%20v1.0.doc January 2002]
| January 2002
| January 2002
| [[.NET Framework version history#.NET Framework 1.0|.नेट फ्रेमवर्क 1.0]]
| [[.NET Framework version history#.NET Framework 1.0|डॉटनेट फ्रेमवर्क 1.0]]
| [[Visual Studio .NET|विजुअल स्टूडियो .नेट 2002]]
| [[Visual Studio .NET|विजुअल स्टूडियो डॉटनेट 2002]]
|-
|-
| scope="row" | सी शार्प 1.1<br />सी शार्प 1.2
| scope="row" | सी शार्प 1.1<br />सी शार्प 1.2
Line 237: Line 237:
| अप्रैल 2003
| अप्रैल 2003
| {{ubl|[[डॉटनेट फ्रेमवर्क 1.1]]}}
| {{ubl|[[डॉटनेट फ्रेमवर्क 1.1]]}}
| [[Visual Studio .NET 2003|विजुअल स्टूडियो .नेट 2003]]
| [[Visual Studio .NET 2003|विजुअल स्टूडियो डॉटनेट 2003]]
|-
|-
| scope="row" | [[C Sharp 2.0|सी शार्प 2.0]]<ref>{{cite web|title=What's new in the C# 2.0 Language and Compiler|url=http://msdn.microsoft.com/en-us/library/7cz8t42e(v=vs.80).aspx|publisher=Microsoft|archive-url = https://web.archive.org/web/20101218191709/http://msdn.microsoft.com/en-us/library/7cz8t42e(v=vs.80).aspx|access-date=11 June 2014|archive-date = December 18, 2010}}</ref>
| scope="row" | [[C Sharp 2.0|सी शार्प 2.0]]<ref>{{cite web|title=What's new in the C# 2.0 Language and Compiler|url=http://msdn.microsoft.com/en-us/library/7cz8t42e(v=vs.80).aspx|publisher=Microsoft|archive-url = https://web.archive.org/web/20101218191709/http://msdn.microsoft.com/en-us/library/7cz8t42e(v=vs.80).aspx|access-date=11 June 2014|archive-date = December 18, 2010}}</ref>
Line 327: Line 327:




== सिंटेक्स ==
== वाक्य-रचना ==
{{Main|सी शार्प सिन्टैक्स|l1=C# syntax}}
{{Main|सी शार्प सिन्टैक्स|l1=C# वाक्य-रचना}}
{{See also|Syntax (programming languages)}}
{{See also|वाक्य - विन्यास}}
सी शार्प भाषा का मूल सिंटैक्स अन्य C-शैली भाषाओं जैसे C, C++ और जावा के समान है, विशेष रूप से:
सी शार्प भाषा की मूल वाक्य-रचना अन्य C-शैली भाषाओं जैसे C, C++ और जावा के समान है, विशेष रूप से:


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


== विशिष्ट विशेषताएं ==
== विविक्तिकर विशेषताएं ==
{{See also|Comparison of C Sharp and Java|l1=Comparison of C# and Java}}
{{See also|सी शार्प और जावा की तुलना|l1=सी शार्प और जावा की तुलना}}
सी शार्प की कुछ उल्लेखनीय विशेषताएं जो इसे सी, सी ++ और जावा से अलग करती हैं, जहां उल्लेख किया गया है:
सी शार्प की कुछ उल्लेखनीय विशेषताओ का उल्लेख नीचे किया गया है जो इसे सी, सी ++ और जावा से अलग करती हैं:


=== पोर्टेबिलिटी ===
=== सुवाह्यता ===
डिज़ाइन के अनुसार, सी शार्प प्रोग्रामिंग भाषा है जो अंतर्निहित [[सामान्य भाषा अवसंरचना]] (CLI) को सीधे तौर पर दर्शाती है।{{sfn|Novák|Velvart|Granicz|Balássy|2010}} इसके अधिकांश आंतरिक प्रकार सीएलआई ढांचे द्वारा कार्यान्वित मूल्य-प्रकारों के अनुरूप हैं। हालांकि, भाषा विनिर्देश संकलक की कोड जनरेशन आवश्यकताओं को नहीं बताता है: यानी, यह नहीं बताता है कि सी शार्प कंपाइलर को सामान्य भाषा रनटाइम को लक्षित करना चाहिए, या सामान्य इंटरमीडिएट भाषा (सीआईएल) उत्पन्न करना चाहिए, या कोई अन्य विशिष्ट प्रारूप उत्पन्न करना चाहिए। सैद्धांतिक रूप से, एक सी शार्प कंपाइलर सी ++ या [[फोरट्रान]] के पारंपरिक कंपाइलर्स जैसे मशीन कोड उत्पन्न कर सकता है।
प्रारूप के अनुसार, सी शार्प प्रोग्रामिंग भाषा है जो अंतर्निहित [[सामान्य भाषा अवसंरचना]] को सीधे तौर पर दर्शाती है।{{sfn|Novák|Velvart|Granicz|Balássy|2010}} इसके अधिकांश आंतरिक प्रकार सीएलआई संरचना द्वारा कार्यान्वित मूल्य-प्रकारों के अनुरूप हैं। यद्यपि, भाषा विनिर्देश संकलक की कोड जनरेशन आवश्यकताओं को नहीं बताता है: अर्थात, यह नहीं बताता है कि सी शार्प कंपाइलर को सामान्य भाषा रनटाइम को लक्षित करना चाहिए, या सामान्य मध्यवर्ती भाषा उत्पन्न करना चाहिए, या कोई अन्य विशिष्ट प्रारूप उत्पन्न करना चाहिए। सैद्धांतिक रूप से, एक सी शार्प कंपाइलर सी ++ या [[फोरट्रान]] के पारंपरिक कंपाइलर्स जैसे यंत्र कोड उत्पन्न कर सकता है।


=== टाइपिंग ===
=== टाइपिंग ===
सी शार्प कीवर्ड के साथ दृढ़ता से टाइप किए गए परिवर्तनीय घोषणाओं का दृढ़ता से समर्थन करता है <code>var</code>,{{sfn|Skeet|2019}}{{rp|470}} और कीवर्ड के साथ निहित रूप से टाइप की गई सरणियाँ <code>new[]</code> एक संग्रह प्रारंभकर्ता द्वारा पीछा किया।{{sfn|Skeet|2019}}{{rp|80}}{{sfn|Albahari|2022}}{{rp|58}}
सी शार्प कीवर्ड के साथ दृढ़ता से टाइप किए गए परिवर्तनीय घोषणाओं का दृढ़ता से समर्थन करता है <code>var</code>,{{sfn|Skeet|2019}}{{rp|470}} और कीवर्ड के साथ निहित रूप से टाइप की गई सरणियाँ <code>new[]</code> एक संग्रह प्रारंभकर्ता द्वारा समर्थित होती है।{{sfn|Skeet|2019}}{{rp|80}}{{sfn|Albahari|2022}}{{rp|58}}


सी शार्प सख्त [[बूलियन डेटा प्रकार]] का समर्थन करता है, <code>bool</code>. बयान जो शर्तों को लेते हैं, जैसे <code>while</code> और <code>if</code>, को लागू करने वाले प्रकार की अभिव्यक्ति की आवश्यकता होती है <code>true</code> ऑपरेटर, जैसे बूलियन प्रकार। जबकि C++ में एक बूलियन प्रकार भी है, इसे पूर्णांकों और भावों से मुक्त रूप से परिवर्तित किया जा सकता है <code>if (a)</code> केवल उसी की आवश्यकता है <code>a</code> बूल में परिवर्तनीय है, अनुमति देता है <code>a</code> एक int, या एक सूचक होने के लिए। सी शार्प इस पूर्णांक अर्थ को सही या गलत दृष्टिकोण से अस्वीकार करता है, इस आधार पर कि प्रोग्रामर को उन अभिव्यक्तियों का उपयोग करने के लिए मजबूर किया जाता है जो बिल्कुल वापस आते हैं <code>bool</code> कुछ प्रकार की प्रोग्रामिंग गलतियों को रोक सकता है जैसे <code>if (a = b)</code> (असाइनमेंट का उपयोग <code>=</code> समानता के बजाय <code>==</code>).
सी शार्प सख्त [[बूलियन डेटा प्रकार]] का समर्थन करता है, <code>bool</code>. घोषणा जो शर्तों को प्ररूपित करते हैं, जैसे <code>while</code> और <code>if</code>, को लागू करने वाले प्रकार की अभिव्यक्ति की आवश्यकता होती है <code>true</code> संक्रिया, जैसे बूलियन प्रकार का अत्यधिक उपयोग किया जाता है। जबकि C++ में एक बूलियन प्रकार भी है, इसे पूर्णांकों और भावों से मुक्त रूप से परिवर्तित किया जा सकता है <code>if (a)</code> केवल उसी की आवश्यकता है <code>a</code> बूल में परिवर्तनीय है,<code>a</code> एक int, को एक सूचक होने के लिए अनुमति देता है । सी शार्प इस पूर्णांक अर्थ को सही या गलत दृष्टिकोण से अस्वीकार करता है, इस आधार पर कि प्रोग्रामर को उन अभिव्यक्तियों का उपयोग करने के लिए मजबूर किया जाता है जो बिल्कुल वापस आते हैं। <code>bool</code> कुछ प्रकार की प्रोग्रामिंग गलतियों को रोक सकता है जैसे <code>if (a = b)</code>  


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


सी शार्प में सामान्य प्रकारों में [[सहप्रसरण और प्रतिप्रसरण (कंप्यूटर विज्ञान)]] के लिए स्पष्ट समर्थन है,{{sfn|Skeet|2019}}{{rp|144}}{{sfn|Albahari|2022}}{{rp|23}} C++ के विपरीत, जिसमें आभासी पद्धतियों पर केवल रिटर्न प्रकारों के सिमेंटिक्स के माध्यम से प्रतिप्रसरण के लिए कुछ हद तक समर्थन है।
सी शार्प में सामान्य प्रकारों में [[सहप्रसरण और प्रतिप्रसरण (कंप्यूटर विज्ञान)|सहप्रसरण और प्रतिप्रसरण]] के लिए स्पष्ट समर्थन है,{{sfn|Skeet|2019}}{{rp|144}}{{sfn|Albahari|2022}}{{rp|23}} C++ के विपरीत, जिसमें आभासी पद्धतियों पर केवल रिटर्न प्रकारों के सिमेंटिक्स के माध्यम से प्रतिप्रसरण के लिए कुछ सीमा तक समर्थन है।


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


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


स्थानीय चर C और C ++ के विपरीत, एनक्लोजिंग ब्लॉक के वेरिएबल शैडोइंग वैरिएबल नहीं हो सकते।
स्थानीय चर C और C ++ के विपरीत, एनक्लोजिंग खंड के चर शैडोइंग चर नहीं हो सकते हैं।
<!--NOTE TO EDITORS: Classes do NOT *NEED* to go in a Namespace. Check the spec or try it out yourself before stating otherwise.-->
 




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


* चिंतनशील प्रोग्रामिंग .नेट API के माध्यम से समर्थित है, जो टाइप मेटाडेटा निरीक्षण और डायनेमिक विधि मंगलाचरण जैसे परिदृश्यों को सक्षम करता है।
* मेटाप्रोग्रामिंग डॉटनेट API के माध्यम से समर्थित है, जो टाइप मेटाडेटा निरीक्षण और डायनेमिक विधि मंगलाचरण जैसे परिदृश्यों को सक्षम करता है।
* अभिव्यक्ति के पेड़<ref>{{Cite web|last=BillWagner|title=अभिव्यक्ति के पेड़ (सी #)|url=https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/|access-date=2021-05-14|website=docs.microsoft.com|language=en-us}}</ref> एक [[सार वाक्य रचना का पेड़]] के रूप में कोड का प्रतिनिधित्व करते हैं, जहां प्रत्येक नोड एक अभिव्यक्ति है जिसे निरीक्षण या निष्पादित किया जा सकता है। यह रनटाइम पर निष्पादन योग्य कोड के गतिशील संशोधन को सक्षम करता है। अभिव्यक्ति के पेड़ भाषा में कुछ [[समरूपता]] का परिचय देते हैं।
* अभिव्यक्ति ट्री<ref>{{Cite web|last=BillWagner|title=अभिव्यक्ति के पेड़ (सी #)|url=https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/expression-trees/|access-date=2021-05-14|website=docs.microsoft.com|language=en-us}}</ref> एक [[सार वाक्य रचना का पेड़|सार वाक्य रचना]] ट्री के रूप में कोड का प्रतिनिधित्व करते हैं, जहां प्रत्येक शीर्ष एक अभिव्यक्ति है जिसे निरीक्षण या निष्पादित किया जा सकता है। यह रनटाइम पर निष्पादन योग्य कोड के गतिशील संशोधन को सक्षम करता है। अभिव्यक्ति ट्री भाषा में कुछ [[समरूपता]] का परिचय देते हैं।
* एट्रिब्यूट (कंप्यूटिंग) मेटाडेटा हैं जिन्हें जावा एनोटेशन के समतुल्य प्रकार, सदस्यों या संपूर्ण [[ विधानसभा (प्रोग्रामिंग) ]] से जोड़ा जा सकता है। विशेषताएँ संकलक और प्रतिबिंब के माध्यम से कोड दोनों के लिए सुलभ हैं। कई मूल विशेषताएँ GCC और VisualC++ के प्लेटफ़ॉर्म-निर्भर प्रीप्रोसेसर निर्देशों की कार्यक्षमता की नकल करती हैं।{{Citation needed|date=March 2022}}
* एट्रिब्यूट मेटाडेटा हैं जिन्हें जावा एनोटेशन के समतुल्य प्रकार, सदस्यों या संपूर्ण [[ विधानसभा (प्रोग्रामिंग) |असेंबली]] से जोड़ा जा सकता है। विशिष्ट संकलक और प्रतिबिंब के माध्यम से कोड दोनों के लिए सुलभ हैं। कई मूल विशेषताएँ जीसीसी और विजुअलसी++ के प्लेटफ़ॉर्म-निर्भर प्रीप्रोसेसर निर्देशों की कार्यक्षमता की नकल करती हैं।
* <code>System.Reflection.Emit</code> नामस्थान,<ref>{{Cite web |last=dotnet-bot |title=System.Reflection.Emit Namespace|url=https://learn.microsoft.com/en-us/dotnet/api/system.reflection.emit?view=net-8.0 |access-date=2023-04-28 |website=learn.microsoft.com |language=en-us}}</ref> जिसमें रनटाइम सिस्टम पर मेटाडेटा और कॉमन इंटरमीडिएट भाषा (प्रकार, असेंबली, आदि) उत्सर्जित करने वाली कक्षाएं सम्मिलित हैं।
* <code>System.Reflection.Emit</code> नामस्थान,<ref>{{Cite web |last=dotnet-bot |title=System.Reflection.Emit Namespace|url=https://learn.microsoft.com/en-us/dotnet/api/system.reflection.emit?view=net-8.0 |access-date=2023-04-28 |website=learn.microsoft.com |language=en-us}}</ref> जिसमें रनटाइम सिस्टम पर मेटाडेटा और कॉमन इंटरमीडिएट भाषा (टाइप, असेंबली, आदि) उत्सर्जित करने वाली कक्षाएं सम्मिलित हैं।
* रोसलिन (कंपाइलर)| .नेट कम्पाइलर प्लेटफॉर्म (रोसलिन) भाषा संकलन सेवाओं के लिए एपीआई एक्सेस प्रदान करता है, जिससे .नेट अनुप्रयोगों के भीतर से सी# कोड के संकलन की अनुमति मिलती है। यह कोड के सिंटैक्टिक (लेक्सिकल विश्लेषण) विश्लेषण, सिमेंटिक विश्लेषण (संकलक), सीआईएल के लिए गतिशील संकलन और कोड उत्सर्जन के लिए एपीआई को उजागर करता है।<ref>{{Cite web |last=McAllister |first=Neil |date=2011-10-20 |title=Microsoft's Roslyn: Reinventing the compiler as we know it |url=https://www.infoworld.com/article/2621132/microsoft-s-roslyn--reinventing-the-compiler-as-we-know-it.html |access-date=2022-03-05 |website=InfoWorld |language=en}}</ref>
* रोसलिन, डॉटनेट कम्पाइलर प्लेटफॉर्म भाषा संकलन सेवाओं के लिए एपीआई प्रयोग प्रदान करता है, जिससे डॉटनेट अनुप्रयोगों के भीतर से सी# कोड के संकलन की अनुमति मिलती है। यह कोड के सिंटैक्टिक (लेक्सिकल विश्लेषण) विश्लेषण, सिमेंटिक विश्लेषण , सीआईएल के लिए गतिशील संकलन और कोड उत्सर्जन के लिए एपीआई को उजागर करता है।<ref>{{Cite web |last=McAllister |first=Neil |date=2011-10-20 |title=Microsoft's Roslyn: Reinventing the compiler as we know it |url=https://www.infoworld.com/article/2621132/microsoft-s-roslyn--reinventing-the-compiler-as-we-know-it.html |access-date=2022-03-05 |website=InfoWorld |language=en}}</ref>
* स्रोत जनरेटर,<ref>{{Cite web|date=2020-04-29|title=पेश है C# सोर्स जेनरेटर|url=https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/|access-date=2021-05-14|website=.NET Blog|language=en-US}}</ref> रोसलिन सी शार्प कंपाइलर की एक विशेषता, संकलन समय मेटाप्रोग्रामिंग को सक्षम करती है। संकलन प्रक्रिया के दौरान, डेवलपर्स संकलक के एपीआई के साथ संकलित किए जा रहे कोड का निरीक्षण कर सकते हैं और अतिरिक्त उत्पन्न सी शार्प स्रोत कोड को संकलित करने के लिए पास कर सकते हैं।
* स्रोत जनरेटर,<ref>{{Cite web|date=2020-04-29|title=पेश है C# सोर्स जेनरेटर|url=https://devblogs.microsoft.com/dotnet/introducing-c-source-generators/|access-date=2021-05-14|website=.NET Blog|language=en-US}}</ref> रोसलिन सी शार्प कंपाइलर की एक विशेषता, संकलन समय मेटाप्रोग्रामिंग को सक्षम करती है। संकलन प्रक्रिया के दौरान, डेवलपर्स संकलक के एपीआई के साथ संकलित किए जा रहे कोड का निरीक्षण कर सकते हैं और अतिरिक्त उत्पन्न सी शार्प स्रोत कोड को संकलित करने के लिए पास कर सकते हैं।


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


Line 379: Line 379:
प्ररूप <code>dynamic</code> रन-टाइम मेथड बाइंडिंग की अनुमति देता है, जावास्क्रिप्ट जैसी मेथड कॉल और रन-टाइम ऑब्जेक्ट कंपोज़िशन की अनुमति देता है।{{sfn|Skeet|2019}}{{rp|114-118}}
प्ररूप <code>dynamic</code> रन-टाइम मेथड बाइंडिंग की अनुमति देता है, जावास्क्रिप्ट जैसी मेथड कॉल और रन-टाइम ऑब्जेक्ट कंपोज़िशन की अनुमति देता है।{{sfn|Skeet|2019}}{{rp|114-118}}


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


सी शार्प जावा-जैसी पेशकश करता है <code>synchronized</code> विधि कॉल, विशेषता के माध्यम से <code>[MethodImpl(MethodImplOptions.Synchronized)]</code>, और म्युचुअल एक्सक्लूज़न|कीवर्ड के माध्यम से परस्पर-अनन्य लॉक के लिए समर्थन करता है <code>lock</code>.
सी शार्प जावा-जैसी पेशकश करता है <code>synchronized</code> विधि कॉल, विशेषता के माध्यम से <code>[MethodImpl(MethodImplOptions.Synchronized)]</code>, और म्युचुअल एक्सक्लूज़न|कीवर्ड के माध्यम से परस्पर-अनन्य लॉक के लिए समर्थन करता है <code>lock</code>.


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


चूंकि सी शार्प 3.0 ऑटो-कार्यान्वित गुणों की सिंटैक्टिक चीनी उपलब्ध है,<ref name="auto-implemented property">{{cite web |url=https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties|title=ऑटो-कार्यान्वित गुण (सी # प्रोग्रामिंग गाइड)|access-date=September 12, 2020}}</ref> जहां म्यूटेटर विधि | एक्सेसर (गेट्टर) और म्यूटेटर (सेटर) एक वर्ग के एकल गुण (कंप्यूटिंग) पर संचालन को इनकैप्सुलेट करते हैं।
चूंकि सी शार्प 3.0 ऑटो-कार्यान्वित गुणों की सिंटैक्टिक शुगर उपलब्ध है,<ref name="auto-implemented property">{{cite web |url=https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties|title=ऑटो-कार्यान्वित गुण (सी # प्रोग्रामिंग गाइड)|access-date=September 12, 2020}}</ref> जहां म्यूटेटर विधि एक्सेसर (गेट्टर) और म्यूटेटर (सेटर) एक वर्ग के एकल गुण पर संचालन को संवर्धित करते हैं।


=== नामस्थान ===
=== नामस्थान ===
एसी# <code>namespace</code> जावा के समान कोड अलगाव प्रदान करता है <code>package</code> या एक सी ++ {{C++|namespace}}, बहुत समान नियमों और सुविधाओं के साथ a <code>package</code>. सिंटैक्स का उपयोग करके नामस्थान आयात किए जा सकते हैं।<ref>{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-directive|title=निर्देश का उपयोग - सी # संदर्भ|website=Microsoft Docs|language=en-us|access-date=2019-04-14}}</ref>
एक सी# <code>namespace</code> जावा के समान, कोड अलगाव प्रदान करता है जिनके उदाहरण <code>package</code> या एक सी ++ {{C++|namespace}} हैं। अत्यधिक समान नियमों और सुविधाओं के साथ <code>package</code>. सिंटैक्स का उपयोग करके नामस्थान आयात किए जा सकते हैं।<ref>{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/using-directive|title=निर्देश का उपयोग - सी # संदर्भ|website=Microsoft Docs|language=en-us|access-date=2019-04-14}}</ref>




=== मेमोरी एक्सेस ===
=== मेमोरी अभिगम ===
C # में, मेमोरी एड्रेस पॉइंटर्स का उपयोग केवल उन ब्लॉकों के भीतर किया जा सकता है जिन्हें विशेष रूप से असुरक्षित के रूप में चिह्नित किया गया है,<ref>{{Cite web|last=BillWagner|title=असुरक्षित कोड, डेटा के संकेत और फ़ंक्शन संकेत|url=https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/unsafe-code|access-date=2021-06-20|website=docs.microsoft.com|language=en-us}}</ref> और असुरक्षित कोड वाले प्रोग्राम को चलाने के लिए उचित अनुमति की आवश्यकता होती है। अधिकांश ऑब्जेक्ट एक्सेस सुरक्षित ऑब्जेक्ट संदर्भों के माध्यम से किया जाता है, जो हमेशा या तो एक लाइव ऑब्जेक्ट की ओर इशारा करते हैं या अच्छी तरह से परिभाषित Nullable प्रकार का मान रखते हैं; एक मृत वस्तु (जिसे कचरा एकत्र किया गया है), या स्मृति के एक यादृच्छिक ब्लॉक के संदर्भ में प्राप्त करना असंभव है। एक असुरक्षित सूचक एक 'अप्रबंधित' मान प्रकार के उदाहरण को इंगित कर सकता है जिसमें कचरा-एकत्रित वस्तुओं, सरणी, स्ट्रिंग, या ढेर-आवंटित स्मृति का कोई संदर्भ नहीं होता है। कोड जो असुरक्षित के रूप में चिह्नित नहीं है, वह अभी भी पॉइंटर्स को स्टोर और मैनिपुलेट कर सकता है <code>System.IntPtr</code> टाइप करें, लेकिन यह उन्हें डीरेफरेंस नहीं कर सकता है।
C # में, मेमोरी एड्रेस पॉइंटर्स का उपयोग केवल उन ब्लॉकों के भीतर किया जा सकता है जिन्हें विशेष रूप से असुरक्षित के रूप में चिह्नित किया गया है,<ref>{{Cite web|last=BillWagner|title=असुरक्षित कोड, डेटा के संकेत और फ़ंक्शन संकेत|url=https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/unsafe-code|access-date=2021-06-20|website=docs.microsoft.com|language=en-us}}</ref> और असुरक्षित कोड वाले प्रोग्राम को चलाने के लिए उचित अनुमति की आवश्यकता होती है। अधिकांश ऑब्जेक्ट एक्सेस सुरक्षित ऑब्जेक्ट संदर्भों के माध्यम से किया जाता है, जो हमेशा या तो एक लाइव ऑब्जेक्ट की ओर इशारा करते हैं या अच्छी तरह से परिभाषित शून्य प्रकार का मान रखते हैं; एक मृत वस्तु (जिसे कचरा एकत्र किया गया है), या स्मृति के एक यादृच्छिक ब्लॉक के संदर्भ में प्राप्त करना असंभव है। एक असुरक्षित सूचक एक 'अप्रबंधित' मान प्रकार के उदाहरण को इंगित कर सकता है जिसमें कचरा-एकत्रित वस्तुओं, सरणी, स्ट्रिंग, या ढेर-आवंटित स्मृति का कोई संदर्भ नहीं होता है। कोड जो असुरक्षित के रूप में चिह्नित नहीं है, वह अभी भी पॉइंटर्स को स्टोर और मैनिपुलेट कर सकता है <code>System.IntPtr</code> टाइप करें, लेकिन यह उन्हें डीरेफरेंस नहीं कर सकता है।


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


=== अपवाद ===
=== अपवाद ===
प्रोग्रामर के लिए कई मानक अपवाद उपलब्ध हैं। मानक लाइब्रेरीों में विधियाँ नियमित रूप से कुछ परिस्थितियों में सिस्टम अपवादों को फेंकती हैं और फेंके गए अपवादों की श्रेणी को सामान्य रूप से प्रलेखित किया जाता है। कस्टम अपवाद वर्गों को उन वर्गों के लिए परिभाषित किया जा सकता है जो आवश्यकतानुसार विशेष परिस्थितियों के लिए संचालन की अनुमति देते हैं।<ref>{{cite web | url=https://docs.microsoft.com/en-us/dotnet/standard/exceptions/how-to-create-user-defined-exceptions|title=उपयोगकर्ता परिभाषित अपवाद कैसे बनाएं|access-date=September 12, 2020}}</ref>
प्रोग्रामर के लिए कई मानक अपवाद उपलब्ध हैं। मानक लाइब्रेरीों में विधियाँ नियमित रूप से कुछ परिस्थितियों में सिस्टम अपवादों को फेंकती हैं और फेंके गए अपवादों की श्रेणी को सामान्य रूप से प्रलेखित किया जाता है। कस्टम अपवाद वर्गों को उन वर्गों के लिए परिभाषित किया जा सकता है जो आवश्यकतानुसार विशेष परिस्थितियों के लिए संचालन की अनुमति देते हैं।<ref>{{cite web | url=https://docs.microsoft.com/en-us/dotnet/standard/exceptions/how-to-create-user-defined-exceptions|title=उपयोगकर्ता परिभाषित अपवाद कैसे बनाएं|access-date=September 12, 2020}}</ref>
[[चेक किए गए अपवाद]] सी शार्प (जावा के विपरीत) में मौजूद नहीं हैं। यह स्केलेबिलिटी और वर्जनेबिलिटी के मुद्दों पर आधारित एक सचेत निर्णय रहा है।<ref>{{cite web
[[चेक किए गए अपवाद]] सी शार्प (जावा के विपरीत) में उपलब्ध नहीं हैं। यह स्केलेबिलिटी और वर्जनेबिलिटी के मुद्दों पर आधारित एक सचेत निर्णय रहा है।<ref>{{cite web
| url = http://www.artima.com/intv/handcuffs.html
| url = http://www.artima.com/intv/handcuffs.html
| title = The Trouble with Checked Exceptions
| title = The Trouble with Checked Exceptions
Line 412: Line 412:


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


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


यद्यपि, जावा के विपरीत, सी शार्प ऑपरेटर ओवरलोडिंग का समर्थन करता है।<ref>{{Cite web|last=BillWagner|title=ऑपरेटर ओवरलोडिंग - सी # संदर्भ|url=https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/operator-overloading|access-date=2021-06-20|website=docs.microsoft.com|language=en-us}}</ref>
यद्यपि, जावा के विपरीत, सी शार्प ऑपरेटर ओवरलोडिंग का समर्थन करता है।<ref>{{Cite web|last=BillWagner|title=ऑपरेटर ओवरलोडिंग - सी # संदर्भ|url=https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/operator-overloading|access-date=2021-06-20|website=docs.microsoft.com|language=en-us}}</ref>
Line 420: Line 420:


=== भाषा एकीकृत क्वेरी (LINQ) ===
=== भाषा एकीकृत क्वेरी (LINQ) ===
सी शार्प में .नेट फ्रेमवर्क के माध्यम से भाषा इंटीग्रेटेड क्वेरी का उपयोग करने की क्षमता है। एक डेवलपर विभिन्न प्रकार के डेटा स्रोतों को क्वेरी कर सकता है, बशर्ते <code>IEnumerable&lt;T&gt;</code> इंटरफ़ेस ऑब्जेक्ट पर लागू किया गया है। इसमें XML दस्तावेज़, ADO.नेट डेटासेट और SQL डेटाबेस सम्मिलित हैं।<ref>{{cite journal |last1=Zhang |first1=Xue Dong |last2=Teng |first2=Zi Mu |last3=Zhao |first3=Dong Wang |title=डेटाबेस एक्सेस टेक्नोलॉजी Under.NET Framework का अनुसंधान|journal=Applied Mechanics and Materials |date=September 2014 |volume=644-650 |pages=3077–3080 |id={{ProQuest|1565579768}} |doi=10.4028/www.scientific.net/AMM.644-650.3077 |s2cid=62201466 }}</ref>
सी शार्प में डॉटनेट फ्रेमवर्क के माध्यम से भाषा इंटीग्रेटेड क्वेरी का उपयोग करने की क्षमता है। एक डेवलपर विभिन्न प्रकार के डेटा स्रोतों को क्वेरी कर सकता है, बशर्ते <code>IEnumerable&lt;T&gt;</code> इंटरफ़ेस ऑब्जेक्ट पर लागू किया गया है। इसमें XML दस्तावेज़, ADOडॉटनेट डेटासेट और SQL डेटाबेस सम्मिलित हैं।<ref>{{cite journal |last1=Zhang |first1=Xue Dong |last2=Teng |first2=Zi Mu |last3=Zhao |first3=Dong Wang |title=डेटाबेस एक्सेस टेक्नोलॉजी Under.NET Framework का अनुसंधान|journal=Applied Mechanics and Materials |date=September 2014 |volume=644-650 |pages=3077–3080 |id={{ProQuest|1565579768}} |doi=10.4028/www.scientific.net/AMM.644-650.3077 |s2cid=62201466 }}</ref>
सी शार्प में LINQ का उपयोग करने से इंटेलिजेंट कोड पूर्ण समर्थन, मजबूत फ़िल्टरिंग क्षमताएं, संकलन त्रुटि जांच क्षमता के साथ प्रकार की सुरक्षा, और विभिन्न स्रोतों पर डेटा पूछताछ के लिए स्थिरता जैसे फायदे मिलते हैं।<ref>{{cite magazine |last1=Otey |first1=Michael |date=February 2006 |title=LINQ भविष्य के लिए|magazine=SQL Server Magazine |volume=8 |issue=2 |pages=17–21 |id={{ProQuest|214859896}} }}</ref> कई अलग-अलग भाषा संरचनाएं हैं जिनका उपयोग C # और LINQ के साथ किया जा सकता है और वे क्वेरी एक्सप्रेशन, लैम्ब्डा एक्सप्रेशन, अनाम प्रकार, निहित रूप से टाइप किए गए चर, एक्सटेंशन मेथड और ऑब्जेक्ट इनिशियलाइज़र हैं।<ref>{{cite magazine |last1=Sheldon |first1=William |date=November 2010 |title=LINQ में नई सुविधाएँ|magazine=SQL Server Magazine |volume=12 |issue=11 |pages=37–40 |id={{ProQuest|770609095}} }}</ref>
सी शार्प में LINQ का उपयोग करने से इंटेलिजेंट कोड पूर्ण समर्थन, मजबूत फ़िल्टरिंग क्षमताएं, संकलन त्रुटि जांच क्षमता के साथ प्रकार की सुरक्षा, और विभिन्न स्रोतों पर डेटा पूछताछ के लिए स्थिरता जैसे फायदे मिलते हैं।<ref>{{cite magazine |last1=Otey |first1=Michael |date=February 2006 |title=LINQ भविष्य के लिए|magazine=SQL Server Magazine |volume=8 |issue=2 |pages=17–21 |id={{ProQuest|214859896}} }}</ref> कई अलग-अलग भाषा संरचनाएं हैं जिनका उपयोग C # और LINQ के साथ किया जा सकता है और वे क्वेरी एक्सप्रेशन, लैम्ब्डा एक्सप्रेशन, अनाम प्रकार, निहित रूप से टाइप किए गए चर, एक्सटेंशन मेथड और ऑब्जेक्ट इनिशियलाइज़र हैं।<ref>{{cite magazine |last1=Sheldon |first1=William |date=November 2010 |title=LINQ में नई सुविधाएँ|magazine=SQL Server Magazine |volume=12 |issue=11 |pages=37–40 |id={{ProQuest|770609095}} }}</ref>
LINQ के दो सिंटैक्स हैं: क्वेरी सिंटैक्स और मेथड सिंटैक्स। यद्यपि, कंपाइलर हमेशा क्वेरी सिंटैक्स को कंपाइल समय पर मेथड सिंटैक्स में परिवर्तित करता है।<ref>{{Cite web |last=BillWagner |date=2021-09-15 |title=LINQ में क्वेरी सिंटेक्स और विधि सिंटेक्स (सी#)|url=https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/query-syntax-and-method-syntax-in-linq |access-date=2023-05-23 |website=learn.microsoft.com |language=en-us}}</ref>
LINQ के दो सिंटैक्स हैं: क्वेरी सिंटैक्स और मेथड सिंटैक्स। यद्यपि, कंपाइलर हमेशा क्वेरी सिंटैक्स को कंपाइल समय पर मेथड सिंटैक्स में परिवर्तित करता है।<ref>{{Cite web |last=BillWagner |date=2021-09-15 |title=LINQ में क्वेरी सिंटेक्स और विधि सिंटेक्स (सी#)|url=https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/linq/query-syntax-and-method-syntax-in-linq |access-date=2023-05-23 |website=learn.microsoft.com |language=en-us}}</ref>
Line 445: Line 445:


=== कार्यात्मक प्रोग्रामिंग ===
=== कार्यात्मक प्रोग्रामिंग ===
हालांकि मुख्य रूप से एक अनिवार्य भाषा, सी शार्प हमेशा समय के साथ कार्यात्मक विशेषताएं जोड़ती है,<ref>{{Cite web |last=erikdietrich |title=सी # - सी # गाइड का इतिहास|url=https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-version-history |access-date=2023-04-28 |website=learn.microsoft.com |date=March 9, 2023 |language=en-us}}</ref><ref>{{Citation |title=The functional journey of C# - Mads Torgersen - NDC Copenhagen 2022 |url=https://www.youtube.com/watch?v=CLKZ7ZgVido |access-date=2023-05-15 |language=en}}</ref> उदाहरण के लिए:
यद्यपि मुख्य रूप से एक अनिवार्य भाषा, सी शार्प हमेशा समय के साथ कार्यात्मक विशेषताएं जोड़ती है,<ref>{{Cite web |last=erikdietrich |title=सी # - सी # गाइड का इतिहास|url=https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-version-history |access-date=2023-04-28 |website=learn.microsoft.com |date=March 9, 2023 |language=en-us}}</ref><ref>{{Citation |title=The functional journey of C# - Mads Torgersen - NDC Copenhagen 2022 |url=https://www.youtube.com/watch?v=CLKZ7ZgVido |access-date=2023-05-15 |language=en}}</ref> उदाहरण के लिए:


* प्रथम श्रेणी का कार्य | प्रथम श्रेणी के नागरिक के रूप में कार्य - सी शार्प 1.0 प्रतिनिधि<ref>{{Cite web |title=क्लोजर की सुंदरता|url=https://csharpindepth.com/Articles/Closures |access-date=2023-04-28 |website=csharpindepth.com}}</ref>
* प्रथम श्रेणी का कार्य | प्रथम श्रेणी के नागरिक के रूप में कार्य - सी शार्प 1.0 प्रतिनिधि<ref>{{Cite web |title=क्लोजर की सुंदरता|url=https://csharpindepth.com/Articles/Closures |access-date=2023-04-28 |website=csharpindepth.com}}</ref>
Line 452: Line 452:
* [[क्लोजर (कंप्यूटर प्रोग्रामिंग)]] - सी शार्प 2 एक साथ गुमनाम प्रतिनिधियों के साथ और सी शार्प 3 एक साथ लैम्ब्डा एक्सप्रेशन के साथ<ref name="BillWagner" />* अनुमान टाइप करें - सी शार्प 3 निहित रूप से टाइप किए गए स्थानीय चर के साथ {{C sharp|var}} और सी शार्प 9 लक्ष्य-टाइप किए गए नए भाव {{C sharp|new()}}
* [[क्लोजर (कंप्यूटर प्रोग्रामिंग)]] - सी शार्प 2 एक साथ गुमनाम प्रतिनिधियों के साथ और सी शार्प 3 एक साथ लैम्ब्डा एक्सप्रेशन के साथ<ref name="BillWagner" />* अनुमान टाइप करें - सी शार्प 3 निहित रूप से टाइप किए गए स्थानीय चर के साथ {{C sharp|var}} और सी शार्प 9 लक्ष्य-टाइप किए गए नए भाव {{C sharp|new()}}
* सूची समझ - सी शार्प 3 LINQ
* सूची समझ - सी शार्प 3 LINQ
* Tuple - .नेट फ्रेमवर्क 4.0 लेकिन यह लोकप्रिय हो गया जब सी शार्प 7.0 ने भाषा समर्थन के साथ एक नया टपल प्रकार पेश किया<ref name=":0">{{Cite web |title=What's New in C# 7.0 |url=https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7 |access-date=2019-04-14 |website=Microsoft Docs |language=en-us}}</ref>
* Tuple - डॉटनेट फ्रेमवर्क 4.0 लेकिन यह लोकप्रिय हो गया जब सी शार्प 7.0 ने भाषा समर्थन के साथ एक नया टपल प्रकार पेश किया<ref name=":0">{{Cite web |title=What's New in C# 7.0 |url=https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7 |access-date=2019-04-14 |website=Microsoft Docs |language=en-us}}</ref>
* नेस्टेड फ़ंक्शन - सी शार्प 7.0<ref name=":0" />* पैटर्न मैचिंग - सी शार्प 7.0<ref name=":0" />* अपरिवर्तनीय वस्तु - सी शार्प 7.2 केवल पढ़ने के लिए संरचना सी शार्प 9 रिकॉर्ड प्रकार<ref>{{Cite web |date=2020-11-10 |title=C# 9.0 on the record |url=https://devblogs.microsoft.com/dotnet/c-9-0-on-the-record/ |access-date=2021-05-15 |website=.NET Blog |language=en-US}}</ref> और इनिट केवल बसता है<ref>{{Cite web |last=BillWagner |date=2022-06-30 |title=init कीवर्ड - सी # संदर्भ|url=https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/init |access-date=2023-05-19 |website=learn.microsoft.com |language=en-us}}</ref>
* नेस्टेड फ़ंक्शन - सी शार्प 7.0<ref name=":0" />* पैटर्न मैचिंग - सी शार्प 7.0<ref name=":0" />* अपरिवर्तनीय वस्तु - सी शार्प 7.2 केवल पढ़ने के लिए संरचना सी शार्प 9 रिकॉर्ड प्रकार<ref>{{Cite web |date=2020-11-10 |title=C# 9.0 on the record |url=https://devblogs.microsoft.com/dotnet/c-9-0-on-the-record/ |access-date=2021-05-15 |website=.NET Blog |language=en-US}}</ref> और इनिट केवल बसता है<ref>{{Cite web |last=BillWagner |date=2022-06-30 |title=init कीवर्ड - सी # संदर्भ|url=https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/init |access-date=2023-05-19 |website=learn.microsoft.com |language=en-us}}</ref>
* टाइप क्लास - सी शार्प 12 भूमिकाएं/एक्सटेंशन (विकास में<ref>{{Citation |title=The .NET Compiler Platform |date=2023-04-28 |url=https://github.com/dotnet/roslyn/blob/ce2b2c7d31eb985d9a75bf967eb43eaa15ab7c68/docs/Language%20Feature%20Status.md |access-date=2023-04-28 |publisher=.NET Platform}}</ref>)
* टाइप क्लास - सी शार्प 12 भूमिकाएं/एक्सटेंशन (विकास में<ref>{{Citation |title=The .NET Compiler Platform |date=2023-04-28 |url=https://github.com/dotnet/roslyn/blob/ce2b2c7d31eb985d9a75bf967eb43eaa15ab7c68/docs/Language%20Feature%20Status.md |access-date=2023-04-28 |publisher=.NET Platform}}</ref>)
Line 469: Line 469:
मूल्य प्रकारों के उदाहरणों में न तो संदर्भित पहचान है और न ही संदर्भात्मक तुलना शब्दार्थ। मूल्य प्रकारों के लिए समानता और असमानता की तुलना उदाहरणों के भीतर वास्तविक डेटा मूल्यों की तुलना करती है, जब तक कि संबंधित ऑपरेटरों को अतिभारित न किया जाए। मूल्य प्रकार से प्राप्त होते हैं {{C sharp|System.ValueType}}, हमेशा एक डिफ़ॉल्ट मान होता है, और इसे हमेशा बनाया और कॉपी किया जा सकता है। मूल्य प्रकारों पर कुछ अन्य सीमाएँ हैं कि वे एक दूसरे से प्राप्त नहीं कर सकते हैं (लेकिन इंटरफेस को लागू कर सकते हैं) और एक स्पष्ट डिफ़ॉल्ट (पैरामीटर रहित) निर्माता नहीं हो सकता है क्योंकि उनके पास पहले से ही एक निहित है जो सभी निहित डेटा को प्रकार-निर्भर डिफ़ॉल्ट मान ( 0, शून्य, या समान)। मूल्य प्रकार के उदाहरण सभी आदिम प्रकार हैं, जैसे {{C sharp|int}} (एक हस्ताक्षरित 32-बिट पूर्णांक), {{C sharp|float}} (एक 32-बिट IEEE फ़्लोटिंग-प्वाइंट संख्या), {{C sharp|char}} (एक 16-बिट यूनिकोड कोड इकाई), और {{C sharp|System.DateTime}} (नैनोसेकंड सटीकता के साथ समय में एक विशिष्ट बिंदु की पहचान करता है)। अन्य उदाहरण हैं {{C sharp|enum}} (गणना) और {{C sharp|struct}} (उपयोगकर्ता परिभाषित संरचनाएं)।
मूल्य प्रकारों के उदाहरणों में न तो संदर्भित पहचान है और न ही संदर्भात्मक तुलना शब्दार्थ। मूल्य प्रकारों के लिए समानता और असमानता की तुलना उदाहरणों के भीतर वास्तविक डेटा मूल्यों की तुलना करती है, जब तक कि संबंधित ऑपरेटरों को अतिभारित न किया जाए। मूल्य प्रकार से प्राप्त होते हैं {{C sharp|System.ValueType}}, हमेशा एक डिफ़ॉल्ट मान होता है, और इसे हमेशा बनाया और कॉपी किया जा सकता है। मूल्य प्रकारों पर कुछ अन्य सीमाएँ हैं कि वे एक दूसरे से प्राप्त नहीं कर सकते हैं (लेकिन इंटरफेस को लागू कर सकते हैं) और एक स्पष्ट डिफ़ॉल्ट (पैरामीटर रहित) निर्माता नहीं हो सकता है क्योंकि उनके पास पहले से ही एक निहित है जो सभी निहित डेटा को प्रकार-निर्भर डिफ़ॉल्ट मान ( 0, शून्य, या समान)। मूल्य प्रकार के उदाहरण सभी आदिम प्रकार हैं, जैसे {{C sharp|int}} (एक हस्ताक्षरित 32-बिट पूर्णांक), {{C sharp|float}} (एक 32-बिट IEEE फ़्लोटिंग-प्वाइंट संख्या), {{C sharp|char}} (एक 16-बिट यूनिकोड कोड इकाई), और {{C sharp|System.DateTime}} (नैनोसेकंड सटीकता के साथ समय में एक विशिष्ट बिंदु की पहचान करता है)। अन्य उदाहरण हैं {{C sharp|enum}} (गणना) और {{C sharp|struct}} (उपयोगकर्ता परिभाषित संरचनाएं)।


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


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


मानक सीएलआई विनिर्देशों के अलावा, कई वाणिज्यिक और सामुदायिक वर्ग लाइब्रेरी हैं जो अतिरिक्त कार्यक्षमता प्रदान करने के लिए .नेट फ्रेमवर्क लाइब्रेरीों के शीर्ष पर निर्मित होते हैं।<ref>{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/standard/framework-libraries|title=फ्रेमवर्क पुस्तकालय|website=docs.microsoft.com|date=April 19, 2023 }}</ref>
मानक सीएलआई विनिर्देशों के अलावा, कई वाणिज्यिक और सामुदायिक वर्ग लाइब्रेरी हैं जो अतिरिक्त कार्यक्षमता प्रदान करने के लिए डॉटनेट फ्रेमवर्क लाइब्रेरीों के शीर्ष पर निर्मित होते हैं।<ref>{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/standard/framework-libraries|title=फ्रेमवर्क पुस्तकालय|website=docs.microsoft.com|date=April 19, 2023 }}</ref>सी शार्प डॉटनेट लाइब्रेरी और फ्रेमवर्क की सूची में सम्मिलित किसी भी लाइब्रेरी को कॉल कर सकता है।
सी शार्प .नेट लाइब्रेरी और फ्रेमवर्क की सूची में सम्मिलित किसी भी लाइब्रेरी को कॉल कर सकता है।


== उदाहरण ==
== उदाहरण ==
Line 524: Line 523:
using System;
using System;
</syntaxhighlight>
</syntaxhighlight>
उपरोक्त पंक्ति सभी प्रकार के आयात करती है <code>System</code> नाम स्थान। उदाहरण के लिए, द <code>Console</code> स्रोत कोड में बाद में प्रयुक्त वर्ग में परिभाषित किया गया है <code>System</code> नामस्थान, जिसका अर्थ है कि इसका उपयोग प्रकार के पूर्ण नाम की आपूर्ति के बिना किया जा सकता है (जिसमें नामस्थान सम्मिलित है)।
उपरोक्त पंक्ति सभी प्रकार के आयात करती है <code>System</code> नाम स्थान। उदाहरण के लिए, द <code>Console</code> स्रोत कोड में बाद में प्रयुक्त वर्ग में परिभाषित किया गया है <code>System</code> नामस्थान, जिसका अर्थ है कि इसका उपयोग प्रकार के पूर्ण नाम की आपूर्ति के बिना किया जा सकता है जिसमें नामस्थान सम्मिलित है।


<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
Line 531: Line 530:
class Program
class Program
</syntaxhighlight>
</syntaxhighlight>
ऊपर के लिए एक वर्ग (कंप्यूटर विज्ञान) परिभाषा है {{C sharp|Program}} कक्षा। ब्रेसिज़ की जोड़ी के बीच आने वाली हर चीज़ उस वर्ग का वर्णन करती है।<syntaxhighlight lang="csharp">
ऊपर के लिए एक वर्ग परिभाषा है {{C sharp|Program}} कक्षा। ब्रेसिज़ की जोड़ी के बीच आने वाली हर चीज़ उस वर्ग का वर्णन करती है।<syntaxhighlight lang="csharp">
{
{
     ...
     ...
Line 538: Line 537:
static void Main()
static void Main()
</syntaxhighlight>
</syntaxhighlight>
यह क्लास मेंबर मेथड की घोषणा करता है जहां प्रोग्राम का निष्पादन शुरू होता है। .नेट रनटाइम कॉल करता है {{C sharp|Main}} विधि जावा  के विपरीत, {{C sharp|Main}} विधि की आवश्यकता नहीं है {{C sharp|public}} कीवर्ड, जो कंपाइलर को बताता है कि विधि को किसी भी वर्ग द्वारा कहीं से भी कॉल किया जा सकता है।<ref>{{Cite web|last=BillWagner|title=मुख्य() और कमांड लाइन तर्क|url=https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/program-structure/main-command-line|access-date=2021-08-05|website=docs.microsoft.com|language=en-us}}</ref> लिखना {{C sharp|static void Main(string[] args)}} लिखने के बराबर है {{C sharp|private static void Main(string[] args)}}. मेथड स्टेटिक मेथड्स इंस्टेंस के बिना मेथड को एक्सेसिबल बनाता है {{C sharp|Program}}. प्रत्येक कंसोल एप्लिकेशन का {{C sharp|Main}} प्रवेश बिंदु घोषित किया जाना चाहिए {{C sharp|static}} अन्यथा कार्यक्रम को एक उदाहरण की आवश्यकता होगी {{C sharp|Program}}, लेकिन किसी भी उदाहरण के लिए प्रोग्राम की आवश्यकता होगी। उस अघुलनशील सर्कुलर निर्भरता से बचने के लिए, सी शार्प कंपाइलर प्रोसेसिंग [[सांत्वना आवेदन]] (जैसे ऊपर) एक त्रुटि की रिपोर्ट करते हैं यदि कोई नहीं है {{C sharp|static Main}} तरीका। वह {{C sharp|void}} कीवर्ड यह घोषित करता है {{C sharp|Main}} का कोई रिटर्न मान नहीं है।
यह क्लास मेंबर मेथड की घोषणा करता है जहां प्रोग्राम का निष्पादन शुरू होता है। डॉटनेट रनटाइम कॉल करता है {{C sharp|Main}} विधि जावा  के विपरीत, {{C sharp|Main}} विधि की आवश्यकता नहीं है {{C sharp|public}} कीवर्ड, जो कंपाइलर को बताता है कि विधि को किसी भी वर्ग द्वारा कहीं से भी कॉल किया जा सकता है।<ref>{{Cite web|last=BillWagner|title=मुख्य() और कमांड लाइन तर्क|url=https://docs.microsoft.com/en-us/dotnet/csharp/fundamentals/program-structure/main-command-line|access-date=2021-08-05|website=docs.microsoft.com|language=en-us}}</ref> लिखना {{C sharp|static void Main(string[] args)}} लिखने के बराबर है {{C sharp|private static void Main(string[] args)}}. मेथड स्टेटिक मेथड्स इंस्टेंस के बिना मेथड को एक्सेसिबल बनाता है {{C sharp|Program}}. प्रत्येक कंसोल एप्लिकेशन का {{C sharp|Main}} प्रवेश बिंदु घोषित किया जाना चाहिए {{C sharp|static}} अन्यथा कार्यक्रम को एक उदाहरण की आवश्यकता होगी {{C sharp|Program}}, लेकिन किसी भी उदाहरण के लिए प्रोग्राम की आवश्यकता होगी। उस अघुलनशील सर्कुलर निर्भरता से बचने के लिए, सी शार्प कंपाइलर प्रोसेसिंग [[सांत्वना आवेदन]] (जैसे ऊपर) एक त्रुटि की रिपोर्ट करते हैं यदि कोई नहीं है {{C sharp|static Main}} तरीका। वह {{C sharp|void}} कीवर्ड यह घोषित करता है {{C sharp|Main}} का कोई रिटर्न मान नहीं है।


<syntaxhighlight lang="CSharp">
<syntaxhighlight lang="CSharp">
Line 573: Line 572:
         आईएमजी = Image.FromFile("Image.png);
         आईएमजी = Image.FromFile("Image.png);
     }
     }
}
इससे एक छवि बनेगी जो "Image.png" में संग्रहीत छवि के समान होगी।
</वाक्यविन्यास हाइलाइट>This will create an image that is identical to that stored in "Image.png.


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


माइक्रोसॉफ्ट प्रारंभ में ओपन-सोर्स विकासक पर गैर-लाभकारी परियोजनाओं में एकस्व का उल्लंघन करने के लिए ओपन विशिष्टता प्रॉमिस द्वारा कवर किए गए ढांचे के भाग के लिए मुकदमा नहीं करने के लिए सहमत हुआ।<ref>{{cite web| url = https://msdn.microsoft.com/en-us/openspecifications/dn646765| title = ओपन सोर्स डेवलपर्स के लिए पेटेंट प्रतिज्ञा| date = March 16, 2023}}</ref> माइक्रोसॉफ्ट नोवेल के भुगतान करने वाले ग्राहकों के खिलाफ नोवेल उत्पादों से संबंधित एकस्व लागू नहीं करने पर भी सहमत हो गया है<ref>{{cite web
माइक्रोसॉफ्ट प्रारंभ में ओपन-सोर्स विकासक पर गैर-लाभकारी परियोजनाओं में एकस्व का उल्लंघन करने के लिए ओपन विशिष्टता प्रॉमिस द्वारा कवर किए गए संरचना के भाग के लिए मुकदमा नहीं करने के लिए सहमत हुआ।<ref>{{cite web| url = https://msdn.microsoft.com/en-us/openspecifications/dn646765| title = ओपन सोर्स डेवलपर्स के लिए पेटेंट प्रतिज्ञा| date = March 16, 2023}}</ref> माइक्रोसॉफ्ट नोवेल के भुगतान करने वाले ग्राहकों के खिलाफ नोवेल उत्पादों से संबंधित एकस्व लागू नहीं करने पर भी सहमत हो गया है<ref>{{cite web
  |url          = http://www.microsoft.com/interop/msnovellcollab/patent_agreement.mspx
  |url          = http://www.microsoft.com/interop/msnovellcollab/patent_agreement.mspx
  |title        = Patent Cooperation Agreement - Microsoft & Novell Interoperability Collaboration
  |title        = Patent Cooperation Agreement - Microsoft & Novell Interoperability Collaboration
Line 592: Line 590:
  |url-status=dead
  |url-status=dead
  |df          = mdy-all
  |df          = mdy-all
}}</ref> उन उत्पादों की सूची के अपवाद के साथ जो स्पष्ट रूप से सी शार्प, .नेट या नोवेल के .नेट मोनो के कार्यान्वयन का उल्लेख नहीं करते हैं।<ref>{{cite web
}}</ref> उन उत्पादों की सूची के अपवाद के साथ जो स्पष्ट रूप से सी शार्प, डॉटनेट या नोवेल के डॉटनेट मोनो के कार्यान्वयन का उल्लेख नहीं करते हैं।<ref>{{cite web
  | url = http://www.microsoft.com/interop/msnovellcollab/definitions2.aspx
  | url = http://www.microsoft.com/interop/msnovellcollab/definitions2.aspx
  | title = Definitions
  | title = Definitions
Line 618: Line 616:
  |df          = mdy-all
  |df          = mdy-all
}}</ref>
}}</ref>
एक दशक बाद, माइक्रोसॉफ्ट ने सी शार्प के लिए फ्री, ओपन-सोर्स और क्रॉस-प्लेटफ़ॉर्म टूलिंग विकसित करना शुरू किया, अर्थात् विज़ुअल स्टूडियो कोड, .नेट कोर और रोज़लिन (कंपाइलर)। मोनो माइक्रोसॉफ्ट में Xamarin, एक माइक्रोसॉफ्ट सहायक कंपनी की एक परियोजना के रूप में सम्मिलित हुआ।
एक दशक बाद, माइक्रोसॉफ्ट ने सी शार्प के लिए फ्री, ओपन-सोर्स और क्रॉस-प्लेटफ़ॉर्म टूलिंग विकसित करना शुरू किया, अर्थात् विज़ुअल स्टूडियो कोड, डॉटनेट कोर और रोज़लिन आदि। मोनो माइक्रोसॉफ्ट में समरीन, एक माइक्रोसॉफ्ट सहायक कंपनी की एक परियोजना के रूप में सम्मिलित हुआ।


== कार्यान्वयन ==
== कार्यान्वयन ==
माइक्रोसॉफ्ट ओपन-सोर्स संदर्भ C# कंपाइलर्स और उपकरणों के विकास में अग्रणी भूमिका निभा रहा है। सबसे पहला कंपाइलर, रॉज़लिन, मध्यवर्ती भाषा में कंपाइल करता है, और दूसरा कंपाइलर, र्यूजिट, एक जस्ट-इन-टाइम कंपाइलर है, जो गतिशील होता है और ऑन-द-फ्लाई अनुकूलन और मध्यवर्ती भाषा को फ़्रंट-एंड सीपीयू के लिए प्राकृतिक कूट में कंपाइल करता है।<ref name="bruce">{{cite web |url=https://devblogs.microsoft.com/dotnet/the-ryujit-transition-is-complete/ |title=RyuJIT ट्रांज़िशन पूरा हो गया है!|website=microsoft.com |date=June 19, 2018 |access-date=July 20, 2021 |url-status=live|archive-url=https://web.archive.org/web/20190719034140/https://devblogs.microsoft.com/dotnet/the-ryujit-transition-is-complete/ |archive-date=July 19, 2019 }}</ref><ref>{{cite web |url=https://docs.microsoft.com/en-us/dotnet/standard/managed-execution-process |title=प्रबंधित निष्पादन प्रक्रिया|website=microsoft.com |access-date=July 20, 2021 |url-status=live|archive-url=https://web.archive.org/web/20171223005925/https://docs.microsoft.com/en-us/dotnet/standard/managed-execution-process |archive-date=December 23, 2017 }}</ref> र्यूजिट विवृत्त स्रोत है और C++ में लिखा गया है।<ref>{{cite web |url=https://github.com/dotnet/coreclr/tree/master/src/jit |title=coreclr/src/jit/ |website=github.com |access-date=July 20, 2021 |url-status=live|archive-url=https://web.archive.org/web/20190109215901/https://github.com/dotnet/coreclr/tree/master/src/jit |archive-date=January 9, 2019 }}</ref> रॉज़लिन पूरी तरह से प्रबंधित कोड (सी शार्प) में लिखा गया है, इसे खोल दिया गया है और एपीआई के रूप में कार्यक्षमता सामने आई है। इस प्रकार यह विकासकों को रीफैक्टरिंग और डायग्नोस्टिक्स टूल बनाने में सक्षम बनाता है।<ref name="auto"/><ref>{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/csharp/|title=सी # गाइड|website=docs.microsoft.com}}</ref> आधिकारिक कार्यान्वयन की दो शाखाएँ हैं .नेट फ्रेमवर्क (क्लोज्ड-सोर्स, केवल विंडोज़) और .नेट कोर (ओपन-सोर्स, क्रॉस-प्लेटफ़ॉर्म); वे अंततः एक ओपन-सोर्स .नेट 5.0 कार्यान्वयन में परिवर्तित हो गए।<ref>{{cite web |url=https://dotnet.microsoft.com/download/dotnet/5.0 |title=5.0.8 |website=microsoft.com |access-date=July 20, 2021 |url-status=live|archive-url=https://web.archive.org/web/20200423133947/https://dotnet.microsoft.com/download/dotnet/5.0 |archive-date=April 23, 2020 }}</ref> .नेट फ्रेमवर्क 4.6 में, एक नए जीट कंपाइलर ने पूर्व की जगह ले ली।<ref name="bruce"/><ref>{{cite web |url=https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/mitigation-new-64-bit-jit-compiler |title=Mitigation: New 64-bit JIT Compiler |website=microsoft.com |access-date=July 20, 2021 |url-status=live|archive-url=https://web.archive.org/web/20180405142913/https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/mitigation-new-64-bit-jit-compiler |archive-date=April 5, 2018 }}</ref> अन्य सी शार्प कंपाइलर जिनमें से कुछ में सामान्य भाषा इन्फ्रास्ट्रक्चर और .नेट क्लास लाइब्रेरी का कार्यान्वयन सम्मिलित है:
माइक्रोसॉफ्ट ओपन-सोर्स संदर्भ C# कंपाइलर्स और उपकरणों के विकास में अग्रणी भूमिका निभा रहा है। सबसे पहला कंपाइलर, रॉज़लिन, मध्यवर्ती भाषा में कंपाइल करता है, और दूसरा कंपाइलर, र्यूजिट, एक जस्ट-इन-टाइम कंपाइलर है, जो गतिशील होता है और ऑन-द-फ्लाई अनुकूलन और मध्यवर्ती भाषा को फ़्रंट-एंड सीपीयू के लिए प्राकृतिक कूट में कंपाइल करता है।<ref name="bruce">{{cite web |url=https://devblogs.microsoft.com/dotnet/the-ryujit-transition-is-complete/ |title=RyuJIT ट्रांज़िशन पूरा हो गया है!|website=microsoft.com |date=June 19, 2018 |access-date=July 20, 2021 |url-status=live|archive-url=https://web.archive.org/web/20190719034140/https://devblogs.microsoft.com/dotnet/the-ryujit-transition-is-complete/ |archive-date=July 19, 2019 }}</ref><ref>{{cite web |url=https://docs.microsoft.com/en-us/dotnet/standard/managed-execution-process |title=प्रबंधित निष्पादन प्रक्रिया|website=microsoft.com |access-date=July 20, 2021 |url-status=live|archive-url=https://web.archive.org/web/20171223005925/https://docs.microsoft.com/en-us/dotnet/standard/managed-execution-process |archive-date=December 23, 2017 }}</ref> र्यूजिट विवृत्त स्रोत है और C++ में लिखा गया है।<ref>{{cite web |url=https://github.com/dotnet/coreclr/tree/master/src/jit |title=coreclr/src/jit/ |website=github.com |access-date=July 20, 2021 |url-status=live|archive-url=https://web.archive.org/web/20190109215901/https://github.com/dotnet/coreclr/tree/master/src/jit |archive-date=January 9, 2019 }}</ref> रॉज़लिन पूरी तरह से प्रबंधित कोड (सी शार्प) में लिखा गया है, इसे खोल दिया गया है और एपीआई के रूप में कार्यक्षमता सामने आई है। इस प्रकार यह विकासकों को रीफैक्टरिंग और डायग्नोस्टिक्स टूल बनाने में सक्षम बनाता है।<ref name="auto"/><ref>{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/csharp/|title=सी # गाइड|website=docs.microsoft.com}}</ref> आधिकारिक कार्यान्वयन की दो शाखाएँ हैं डॉटनेट फ्रेमवर्क (क्लोज्ड-सोर्स, केवल विंडोज़) और डॉटनेट कोर (ओपन-सोर्स, क्रॉस-प्लेटफ़ॉर्म); वे अंततः एक ओपन-सोर्स डॉटनेट 5.0 कार्यान्वयन में परिवर्तित हो गए।<ref>{{cite web |url=https://dotnet.microsoft.com/download/dotnet/5.0 |title=5.0.8 |website=microsoft.com |access-date=July 20, 2021 |url-status=live|archive-url=https://web.archive.org/web/20200423133947/https://dotnet.microsoft.com/download/dotnet/5.0 |archive-date=April 23, 2020 }}</ref> डॉटनेट फ्रेमवर्क 4.6 में, एक नए जीट कंपाइलर ने पूर्व की जगह ले ली।<ref name="bruce"/><ref>{{cite web |url=https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/mitigation-new-64-bit-jit-compiler |title=Mitigation: New 64-bit JIT Compiler |website=microsoft.com |access-date=July 20, 2021 |url-status=live|archive-url=https://web.archive.org/web/20180405142913/https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/mitigation-new-64-bit-jit-compiler |archive-date=April 5, 2018 }}</ref> अन्य सी शार्प कंपाइलर जिनमें से कुछ में सामान्य भाषा इन्फ्रास्ट्रक्चर और डॉटनेट क्लास लाइब्रेरी का कार्यान्वयन सम्मिलित है:
* मोनो, जो माइक्रोसॉफ्ट-प्रायोजित परियोजना है, एक ओपन-सोर्स सी शार्प कंपाइलर प्रदान करती है, सीएलआई का एक पूर्ण ओपन-सोर्स कार्यान्वयन (ईसीएमए विनिर्देश में दिखाई देने वाली आवश्यक रूपरेखा लाइब्रेरीों सहित) और लगभग पूर्ण कार्यान्वयन नेट क्लास लाइब्रेरी .नेट फ्रेमवर्क 3.5 तक समर्थित है।
* मोनो, जो माइक्रोसॉफ्ट-प्रायोजित परियोजना है, एक ओपन-सोर्स सी शार्प कंपाइलर प्रदान करती है, सीएलआई का एक पूर्ण ओपन-सोर्स कार्यान्वयन (ईसीएमए विनिर्देश में दिखाई देने वाली आवश्यक रूपरेखा लाइब्रेरीों सहित) और लगभग पूर्ण कार्यान्वयन नेट क्लास लाइब्रेरी डॉटनेट फ्रेमवर्क 3.5 तक समर्थित है।
* रेमऑब्जेक्ट्स से रेमऑब्जेक्ट्स एलिमेंट्स टूल चेन में रेमऑब्जेक्ट्स सी शार्प सम्मिलित है, जो सी शार्प कोड को .नेट की कॉमन इंटरमीडिएट भाषा, जावा बाइटकोड, कोकोय, दलविक, वेबअसेंबली और विंडोज़, मैकओएस, और लिनक्स के लिए नेटिव यंत्र कोड के लिए कंपाइल करता है।
* रेमऑब्जेक्ट्स से रेमऑब्जेक्ट्स एलिमेंट्स टूल चेन में रेमऑब्जेक्ट्स सी शार्प सम्मिलित है, जो सी शार्प कोड को डॉटनेट की कॉमन इंटरमीडिएट भाषा, जावा बाइटकोड, कोकोय, दलविक, वेबअसेंबली और विंडोज़, मैकओएस, और लिनक्स के लिए नेटिव यंत्र कोड के लिए कंपाइल करता है।
*डॉटजीएनयू परियोजना ने एक ओपन-सोर्स सी शार्प कंपाइलर भी प्रदान किया, जो आवश्यक फ्रेमवर्क लाइब्रेरी सहित सामान्य भाषा इन्फ्रास्ट्रक्चर का लगभग पूर्ण कार्यान्वयन है, जैसा कि वे एकमा विनिर्देशन में दिखाई देते हैं, और कुछ शेष माइक्रोसॉफ्ट मालिकाना .नेट का उपसमुच्चय क्लास लाइब्रेरी .नेट 2.0 तक जो एकमा विनिर्देशन में प्रलेखित या सम्मिलित नहीं हैं, लेकिन माइक्रोसॉफ्ट के मानक .नेट फ्रेमवर्क वितरण में सम्मिलित हैं।
*डॉटजीएनयू परियोजना ने एक ओपन-सोर्स सी शार्प कंपाइलर भी प्रदान किया, जो आवश्यक फ्रेमवर्क लाइब्रेरी सहित सामान्य भाषा इन्फ्रास्ट्रक्चर का लगभग पूर्ण कार्यान्वयन है, जैसा कि वे एकमा विनिर्देशन में दिखाई देते हैं, और कुछ शेष माइक्रोसॉफ्ट मालिकाना डॉटनेट का उपसमुच्चय क्लास लाइब्रेरी डॉटनेट 2.0 तक जो एकमा विनिर्देशन में प्रलेखित या सम्मिलित नहीं हैं, लेकिन माइक्रोसॉफ्ट के मानक डॉटनेट फ्रेमवर्क वितरण में सम्मिलित हैं।
यूनिटी अपनी प्राथमिक स्क्रिप्टिंग भाषा के रूप में सी शार्प का उपयोग करती है। गोडोट ने माइक्रोसॉफ्ट से $24,000 के दान के लिए एक वैकल्पिक सी# मॉड्यूल लागू किया है।<ref>{{cite news|title=गोडोट में सी# का परिचय|work=[[Godot (game engine)|Godot Engine]] |url=https://godotengine.org/article/introducing-csharp-godot |access-date=October 26, 2018 |url-status=live |archive-url=https://web.archive.org/web/20181026084022/https://godotengine.org/article/introducing-csharp-godot |archive-date=October 26, 2018 |date=October 21, 2017|first1=Ignacio|last1=Etcheverry}}</ref>
यूनिटी अपनी प्राथमिक स्क्रिप्टिंग भाषा के रूप में सी शार्प का उपयोग करती है। गोडोट ने माइक्रोसॉफ्ट से $24,000 के दान के लिए एक वैकल्पिक सी# मॉड्यूल लागू किया है।<ref>{{cite news|title=गोडोट में सी# का परिचय|work=[[Godot (game engine)|Godot Engine]] |url=https://godotengine.org/article/introducing-csharp-godot |access-date=October 26, 2018 |url-status=live |archive-url=https://web.archive.org/web/20181026084022/https://godotengine.org/article/introducing-csharp-godot |archive-date=October 26, 2018 |date=October 21, 2017|first1=Ignacio|last1=Etcheverry}}</ref>


Line 692: Line 690:
{{List of International Electrotechnical Commission standards}}
{{List of International Electrotechnical Commission standards}}
{{Authority control}}
{{Authority control}}
[[Category: सी शार्प प्रोग्रामिंग लैंग्वेज परिवार | सी शार्प प्रोग्रामिंग लैंग्वेज परिवार ]] [[Category: 2000 सॉफ्टवेयर]] [[Category: अमेरिकी आविष्कार]] [[Category: प्रोग्रामिंग भाषा]] [[Category: .NET प्रोग्रामिंग लैंग्वेज]] [[Category: कक्षा-आधारित प्रोग्रामिंग भाषाएँ]] [[Category: एक्मा मानकों]] [[Category: कार्यात्मक भाषाएँ]] [[Category: आईईसी मानकों]] [[Category: आईएसओ मानक]] [[Category: माइक्रोसॉफ्ट प्रोग्रामिंग लैंग्वेज]] [[Category: बहु-प्रतिमान प्रोग्रामिंग भाषाएं]] [[Category: 2000 में बनाई गई प्रोग्रामिंग लैंग्वेज]] [[Category: आईएसओ मानक के साथ प्रोग्रामिंग भाषाएँ]] [[Category: वैधानिक रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]] [[Category: संकलित प्रोग्रामिंग भाषाएँ]]


[[Category: Machine Translated Page]]
[[Category:.NET प्रोग्रामिंग लैंग्वेज]]
[[Category:2000 में बनाई गई प्रोग्रामिंग लैंग्वेज]]
[[Category:2000 सॉफ्टवेयर]]
[[Category:All articles containing potentially dated statements]]
[[Category:Articles containing potentially dated statements from November 2022]]
[[Category:Articles with example C Sharp code]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:CS1]]
[[Category:CS1 English-language sources (en)]]
[[Category:CS1 errors]]
[[Category:Citation Style 1 templates|M]]
[[Category:Collapse templates]]
[[Category:Created On 18/06/2023]]
[[Category:Created On 18/06/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with empty portal template]]
[[Category:Pages with script errors]]
[[Category:Portal templates with redlinked portals]]
[[Category:Restricted titles]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates based on the Citation/CS1 Lua module]]
[[Category:Templates generating COinS|Cite magazine]]
[[Category:Templates generating microformats]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia fully protected templates|Cite magazine]]
[[Category:Wikipedia metatemplates]]
[[Category:अमेरिकी आविष्कार]]
[[Category:आईईसी मानकों]]
[[Category:आईएसओ मानक]]
[[Category:आईएसओ मानक के साथ प्रोग्रामिंग भाषाएँ]]
[[Category:एक्मा मानकों]]
[[Category:कक्षा-आधारित प्रोग्रामिंग भाषाएँ]]
[[Category:कार्यात्मक भाषाएँ]]
[[Category:प्रोग्रामिंग भाषा]]
[[Category:बहु-प्रतिमान प्रोग्रामिंग भाषाएं]]
[[Category:माइक्रोसॉफ्ट प्रोग्रामिंग लैंग्वेज]]
[[Category:वैधानिक रूप से टाइप की गई प्रोग्रामिंग भाषाएँ]]
[[Category:संकलित प्रोग्रामिंग भाषाएँ]]
[[Category:सी शार्प प्रोग्रामिंग लैंग्वेज परिवार| सी शार्प प्रोग्रामिंग लैंग्वेज परिवार ]]

Latest revision as of 09:36, 16 July 2023

C#
C Sharp wordmark.svg
ParadigmMulti-paradigm: structured, imperative, object-oriented, event-driven, task-driven, functional, generic, reflective, concurrent
परिवारC
द्वारा डिज़ाइन किया गयाAnders Hejlsberg (Microsoft)
DeveloperMads Torgersen (Microsoft)
पहली प्रस्तुति2000; 24 years ago (2000)[1]
Stable release
Script error: The module returned a nil value. It is supposed to return an export table. / Script error: The module returned a nil value. It is supposed to return an export table.; Error: first parameter cannot be parsed as a date or time. (Script error: The module returned a nil value. It is supposed to return an export table.)
Preview release
Script error: The module returned a nil value. It is supposed to return an export table. / Script error: The module returned a nil value. It is supposed to return an export table.; Error: first parameter cannot be parsed as a date or time. (Script error: The module returned a nil value. It is supposed to return an export table.)
टाइपिंग अनुशासनStatic, dynamic,[2] strong, safe, nominative, partially inferred
प्लेटफॉर्मCommon Language Infrastructure
लाइसेंस
फ़ाइल नाम एक्सटेंशनएस.cs, .csx
वेबसाइटlearn.microsoft.com/en-us/dotnet/csharp/
Major implementations
Visual C#, .NET, .NET Framework (discontinued), Mono, DotGNU (discontinued), Universal Windows Platform
Dialects
, Polyphonic C#, Enhanced C#
Influenced by
C++,[5] , Eiffel, F#,[lower-alpha 1] Haskell, Scala, Icon, J#, J++, Java,[5] ML, Modula-3, Object Pascal,[6] VB
Influenced
Chapel,[7] Clojure,[8] Crystal,[9] D, J#, Dart,[10] F#, Hack, Java,[11][12] Kotlin, Nemerle, Oxygene, Rust,[13] Swift,[14] Vala, TypeScript

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

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

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


प्रारूप लक्ष्य

एकमा मानक सी शार्प के लिए इन प्रारूप लक्ष्यों को सूचीबद्ध करता है:[15]

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


इतिहास

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

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

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

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

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

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

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


नाम

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

सी-शार्प म्यूजिकल नोट

"सी शार्प" (C#) नाम संगीतीय लिखावट से प्रेरित हुआ है, जहां एक शार्प प्रतीक दिखाता है कि लिखी गई संगीतीय नोट को एक सेमीटोन ऊंची स्वर में परिवर्तित किया जाना चाहिए।[38]

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

प्रदर्शन की तकनीकी सीमाओं (मानक फोंट, ब्राउज़र, आदि) के कारण और तथ्य यह है कि शार्प प्रतीक (U+266F MUSIC SHARP SIGN (&sharp;)) अधिकांश कीबोर्ड लेआउट पर उपलब्ध नहीं है, संख्या चिह्न (U+0023 # NUMBER SIGN (&num;)) प्रोग्रामिंग भाषा के लिखित नाम में शार्प प्रतीक का अनुमान लगाने के लिए चुना गया था।[40] यह सम्मेलन एकमा-334 सी शार्प भाषा विशिष्टता में परिलक्षित होता है।[15]

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

संस्करण

संस्करण भाषा विशेषताए दिनांक डॉटनेट विजुअल स्टूडियो
एकमा आइएसओ/आइसीई माइक्रोसॉफ्ट
सी शार्प 1.0 एकमा-334:2003, दिसंबर 2002 आइएसओ/आइसीई 23270:2003, अप्रैल 2003 January 2002 January 2002 डॉटनेट फ्रेमवर्क 1.0 विजुअल स्टूडियो डॉटनेट 2002
सी शार्प 1.1
सी शार्प 1.2
October 2003 अप्रैल 2003 विजुअल स्टूडियो डॉटनेट 2003
सी शार्प 2.0[43] एकमा-334:2006, जून 2006 आइएसओ/आइसीई 23270:2006, सितंबर 2006 सितंबर 2005[lower-alpha 3] नवंबर 2005 विजुअल स्टूडियो 2005
विजुअल स्टूडियो 2008
सी शार्प 3.0[44] None अगस्त 2007 नवंबर 2007
विजुअल स्टूडियो 2008
सी शार्प 4.0[46] अप्रैल 2010 अप्रैल 2010 विजुअल स्टूडियो 2010
सी शार्प 5.0[47] एकमा-334:2017, दिसंबर 2017 आइएसओ/आइसीई 23270:2018, दिसंबर 2018 जून 2013 अगस्त 2012 विजुअल स्टूडियो 2012
विजुअल स्टूडियो 2013
सी शार्प 6.0[48] एकमा-334:2022, जून 2022 None Draft जुलाई 2015
विजुअल स्टूडियो 2015
सी शार्प 7.0[49][50] None विशिष्टता प्रस्ताव मार्च 2017 विजुअल स्टूडियो 2017 संस्करण 15.0[51]
सी शार्प 7.1[52] विशिष्टता प्रस्ताव अगस्त 2017
  • .NET Core 2.0
विजुअल स्टूडियो 2017 संस्करण 15.3[53]
सी शार्प 7.2[54] विशिष्टता प्रस्ताव नवंबर 2017 विजुअल स्टूडियो 2017 संस्करण 15.5[55]
सी शार्प 7.3[56] विशिष्टता प्रस्ताव मई 2018
विजुअल स्टूडियो 2017 संस्करण 15.7[57]
सी शार्प 8.0[58] विशिष्टता प्रस्ताव सितंबर 2019
  • .NET Core 3.0
  • .NET Core 3.1
विजुअल स्टूडियो 2019 संस्करण 16.3[59]
सी शार्प 9.0[60] विशिष्टता प्रस्ताव नवंबर 2020
  • .NET 5.0
विजुअल स्टूडियो 2019 संस्करण 16.8[61]
सी शार्प 10.0[62] विशिष्टता प्रस्ताव नवंबर 2021
  • .NET 6.0
विजुअल स्टूडियो 2022 संस्करण 17.0[63]
सी शार्प 11.0[64] विशिष्टता प्रस्ताव नवंबर 2022
  • .NET 7.0
विजुअल स्टूडियो 2022 संस्करण 17.4[65]


वाक्य-रचना

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

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

विविक्तिकर विशेषताएं

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

सुवाह्यता

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

टाइपिंग

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

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

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

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

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

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

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


मेटाप्रोग्रामिंग

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

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

विधियाँ और कार्य

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

सी ++ की तरह, और जावा के विपरीत, सी शार्प प्रोग्रामर को स्कोप संशोधक कीवर्ड का उपयोग करना चाहिए virtual विधियों को उपवर्गों द्वारा ओवरराइड करने की अनुमति देने के लिए।[72] सी शार्प में एक्सटेंशन विधियां प्रोग्रामर को स्थिर विधियों का उपयोग करने की अनुमति देती हैं जैसे कि वे कक्षा की विधि तालिका से विधियां थीं, जिससे प्रोग्रामर किसी ऑब्जेक्ट में विधियों को जोड़ सकते हैं जो उन्हें लगता है कि उस ऑब्जेक्ट और उसके डेरिवेटिव्स पर मौजूद होना चाहिए।[67]: 103–105 [18]: 202–203 

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

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

सी शार्प जावा-जैसी पेशकश करता है synchronized विधि कॉल, विशेषता के माध्यम से [MethodImpl(MethodImplOptions.Synchronized)], और म्युचुअल एक्सक्लूज़न|कीवर्ड के माध्यम से परस्पर-अनन्य लॉक के लिए समर्थन करता है lock.

गुण

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

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

नामस्थान

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


मेमोरी अभिगम

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

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

अपवाद

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


बहुरूपता

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

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

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


भाषा एकीकृत क्वेरी (LINQ)

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

using System.Linq;

var numbers = new int[] { 5, 10, 8, 3, 6, 12 };

// Query syntax
var numQuery1 =
        from num in numbers
        where num % 2 == 0
        orderby num
        select num;

// Method syntax
var numQuery2 = 
        numbers
        .Where(num => num % 2 == 0)
        .OrderBy(n => n);


कार्यात्मक प्रोग्रामिंग

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

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

सामान्य प्रकार प्रणाली

सी शार्प में एक एकीकृत प्रकार प्रणाली है। इस यूनिफाइड टाइप सिस्टम को कॉमन टाइप सिस्टम (CTS) कहा जाता है।[91]: Part 2, Chapter 4: The Type System 

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

डेटा प्रकार की श्रेणियाँ

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

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

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

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

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

बॉक्सिंग और अनबॉक्सिंग

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

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

int foo = 42;         // Value type.
object bar = foo;     // foo is boxed to bar.
int foo2 = (int)bar;  // Unboxed back to value type.


लाइब्रेरी

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

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

उदाहरण

हैलो वर्ल्ड

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

using System;

Console.WriteLine("Hello, world!");

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

using System;

// A version of the classic "Hello World" program
class Program
{
    static void Main()
    {
        Console.WriteLine("Hello, world!");
    }
}

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

हैलो वर्ल्ड!

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

using System;

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

// A version of the classic "Hello World" program

यह पंक्ति एक टिप्पणी है; यह प्रोग्रामर के लिए कोड का वर्णन और दस्तावेज करता है।

class Program

ऊपर के लिए एक वर्ग परिभाषा है Program कक्षा। ब्रेसिज़ की जोड़ी के बीच आने वाली हर चीज़ उस वर्ग का वर्णन करती है।

{
    ...
}

घुंघराले कोष्ठक एक कोड ब्लॉक की सीमाओं का सीमांकन करते हैं। इस पहले उदाहरण में, वे प्रारंभ और अंत को चिह्नित कर रहे हैं Program कक्षा।

static void Main()

यह क्लास मेंबर मेथड की घोषणा करता है जहां प्रोग्राम का निष्पादन शुरू होता है। डॉटनेट रनटाइम कॉल करता है Main विधि जावा के विपरीत, Main विधि की आवश्यकता नहीं है public कीवर्ड, जो कंपाइलर को बताता है कि विधि को किसी भी वर्ग द्वारा कहीं से भी कॉल किया जा सकता है।[95] लिखना static void Main(string[] args) लिखने के बराबर है private static void Main(string[] args). मेथड स्टेटिक मेथड्स इंस्टेंस के बिना मेथड को एक्सेसिबल बनाता है Program. प्रत्येक कंसोल एप्लिकेशन का Main प्रवेश बिंदु घोषित किया जाना चाहिए static अन्यथा कार्यक्रम को एक उदाहरण की आवश्यकता होगी Program, लेकिन किसी भी उदाहरण के लिए प्रोग्राम की आवश्यकता होगी। उस अघुलनशील सर्कुलर निर्भरता से बचने के लिए, सी शार्प कंपाइलर प्रोसेसिंग सांत्वना आवेदन (जैसे ऊपर) एक त्रुटि की रिपोर्ट करते हैं यदि कोई नहीं है static Main तरीका। वह void कीवर्ड यह घोषित करता है Main का कोई रिटर्न मान नहीं है।

Console.WriteLine("Hello, world!");

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

जीयूआई

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

using System;
using System.Windows.Forms;

class Program
{
    static void Main()
    {
        MessageBox.Show("Hello, World!");
        Console.WriteLine("Is almost the same argument!");
    }
}

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

छवियां

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

सार्वजनिक वर्ग उदाहरण{

   सार्वजनिक स्थिर छवि 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 महीने लगते हैं।

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

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

कार्यान्वयन

माइक्रोसॉफ्ट ओपन-सोर्स संदर्भ C# कंपाइलर्स और उपकरणों के विकास में अग्रणी भूमिका निभा रहा है। सबसे पहला कंपाइलर, रॉज़लिन, मध्यवर्ती भाषा में कंपाइल करता है, और दूसरा कंपाइलर, र्यूजिट, एक जस्ट-इन-टाइम कंपाइलर है, जो गतिशील होता है और ऑन-द-फ्लाई अनुकूलन और मध्यवर्ती भाषा को फ़्रंट-एंड सीपीयू के लिए प्राकृतिक कूट में कंपाइल करता है।[101][102] र्यूजिट विवृत्त स्रोत है और C++ में लिखा गया है।[103] रॉज़लिन पूरी तरह से प्रबंधित कोड (सी शार्प) में लिखा गया है, इसे खोल दिया गया है और एपीआई के रूप में कार्यक्षमता सामने आई है। इस प्रकार यह विकासकों को रीफैक्टरिंग और डायग्नोस्टिक्स टूल बनाने में सक्षम बनाता है।[3][104] आधिकारिक कार्यान्वयन की दो शाखाएँ हैं डॉटनेट फ्रेमवर्क (क्लोज्ड-सोर्स, केवल विंडोज़) और डॉटनेट कोर (ओपन-सोर्स, क्रॉस-प्लेटफ़ॉर्म); वे अंततः एक ओपन-सोर्स डॉटनेट 5.0 कार्यान्वयन में परिवर्तित हो गए।[105] डॉटनेट फ्रेमवर्क 4.6 में, एक नए जीट कंपाइलर ने पूर्व की जगह ले ली।[101][106] अन्य सी शार्प कंपाइलर जिनमें से कुछ में सामान्य भाषा इन्फ्रास्ट्रक्चर और डॉटनेट क्लास लाइब्रेरी का कार्यान्वयन सम्मिलित है:

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

यूनिटी अपनी प्राथमिक स्क्रिप्टिंग भाषा के रूप में सी शार्प का उपयोग करती है। गोडोट ने माइक्रोसॉफ्ट से $24,000 के दान के लिए एक वैकल्पिक सी# मॉड्यूल लागू किया है।[107]


यह भी देखें

टिप्पणियाँ

  1. for async
  2. By convention, a number sign is used for the second character in normal text; in artistic representations, sometimes a true sharp sign is used: C♯. However the ECMA 334 standard states: "The name C# is written as the LATIN CAPITAL LETTER C (U+0043) followed by the NUMBER SIGN # (U+0023)."
  3. The Microsoft C# 2.0 specification document only contains the new 2.0 features. For older features, use the 1.2 specification above.


संदर्भ

  1. "InfoQ eMag: A Preview of C# 7".
  2. Torgersen, Mads (October 27, 2008). "New features in C# 4.0". Microsoft. Retrieved October 28, 2008.
  3. 3.0 3.1 "The Roslyn .NET compiler provides C# and Visual Basic languages with rich code analysis APIs.: dotnet/roslyn". November 13, 2019 – via GitHub.
  4. "CoreCLR is the runtime for .NET Core. It includes the garbage collector, JIT compiler, primitive data types and low-level classes.: dotnet/coreclr". November 13, 2019 – via GitHub.
  5. 5.0 5.1 Naugler, David (May 2007). "C# 2.0 for C++ and Java programmer: conference workshop". Journal of Computing Sciences in Colleges. 22 (5). Although C# has been strongly influenced by Java it has also been strongly influenced by C++ and is best viewed as a descendant of both C++ and Java.
  6. Hamilton, Naomi (October 1, 2008). "The A-Z of Programming Languages: C#". Computerworld. Retrieved February 12, 2010. We all stand on the shoulders of giants here and every language builds on what went before it so we owe a lot to C, C++, Java, Delphi, all of these other things that came before us. (Anders Hejlsberg)
  7. "Chapel spec (Acknowledgments)" (PDF). Cray Inc. 2015-10-01. Retrieved 2016-01-14.
  8. "Rich Hickey Q&A by Michael Fogus". Archived from the original on 2017-01-11. Retrieved 2017-01-11.
  9. Borenszweig, Ary (June 14, 2016). "Crystal 0.18.0 released!". It's heavily inspired by Ruby, and other languages (like C#, Go and Python).
  10. "Web Languages and VMs: Fast Code is Always in Fashion. (V8, Dart) - Google I/O 2013". YouTube. Archived from the original on 2021-12-21. Retrieved 22 December 2013.
  11. Java 5.0 added several new language features (the enhanced for loop, autoboxing, varargs and annotations), after they were introduced in the similar (and competing) C# language [1] [2]
  12. Cornelius, Barry (December 1, 2005). "Java 5 catches up with C#". University of Oxford Computing Services. Retrieved June 18, 2014. In my opinion, it is C# that has caused these radical changes to the Java language. (Barry Cornelius)
  13. "Influences - The Rust Reference". The Rust Reference. Retrieved 2023-04-18.
  14. Lattner, Chris (2014-06-03). "Chris Lattner's Homepage". Chris Lattner. Retrieved 2020-05-12. The Swift language is the product of tireless effort from a team of language experts, documentation gurus, compiler optimization ninjas, and an incredibly important internal dogfooding group who provided feedback to help refine and battle-test ideas. Of course, it also greatly benefited from the experiences hard-won by many other languages in the field, drawing ideas from Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list.
  15. 15.0 15.1 15.2 C# Language Specification (PDF) (4th ed.). Ecma International. June 2006. Retrieved January 26, 2012.
  16. "सी # 11 में आपका स्वागत है". November 11, 2022.
  17. "Announcing .NET 7 -- the Fastest .NET Yet". November 11, 2022.
  18. 18.0 18.1 18.2 18.3 18.4 18.5 Albahari 2022.
  19. "सी # के डिजाइन लक्ष्य". www.java-samples.com. Retrieved 2021-10-06.
  20. Zander, Jason (November 22, 2007). "Couple of Historical Facts". Retrieved February 23, 2009.
  21. Guthrie, Scott (November 28, 2006). "What language was ASP.Net originally written in?". Archived from the original on June 24, 2016. Retrieved February 21, 2008.
  22. Hamilton, Naomi (October 1, 2008). "The A-Z of Programming Languages: C#". Computerworld. Archived from the original on 18 May 2019. Retrieved October 1, 2008.
  23. "विवरण". nilsnaegele.com. Archived from the original on 2019-04-07. Retrieved 2019-04-07.
  24. Wylie Wong (2002). "Why Microsoft's C# isn't". CNET: CBS Interactive. Retrieved May 28, 2014.
  25. Bill Joy (February 7, 2002). "माइक्रोसॉफ्ट का ब्लाइंड स्पॉट". cnet.com. Retrieved January 12, 2010.
  26. Klaus Kreft and Angelika Langer (2003). "After Java and C# - what is next?". Retrieved June 18, 2013.
  27. Klaus Kreft and Angelika Langer (July 3, 2003). "After Java and C# - what is next?". artima.com. Retrieved January 12, 2010.
  28. Osborn, John (August 1, 2000). "Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg". O'Reilly Media. Retrieved November 14, 2009. {{cite journal}}: Cite journal requires |journal= (help)
  29. "Generics (C# Programming Guide)". Microsoft. Retrieved March 21, 2011.
  30. Don Box and Anders Hejlsberg (February 2007). "LINQ: .NET Language-Integrated Query". Microsoft. Retrieved March 21, 2011.
  31. Mercer, Ian (April 15, 2010). "Why functional programming and LINQ is often better than procedural code". abodit.com. Archived from the original on July 11, 2011. Retrieved March 21, 2011.
  32. "एंडी सेवानिवृत्त". Dan Fernandez's Blog. Blogs.msdn.com. January 29, 2004. Archived from the original on January 19, 2016. Retrieved October 4, 2012.
  33. "Technical committees - JTC 1/SC 22 - Programming languages, their environments and system software interfaces". ISO. Retrieved October 4, 2012.
  34. "ISO/IEC 23270:2003 - Information technology - C# Language Specification". Iso.org. August 23, 2006. Archived from the original on May 8, 2012. Retrieved October 4, 2012.
  35. "ISO/IEC 23270:2006 - Information technology - Programming languages - C#". Iso.org. January 26, 2012. Retrieved October 4, 2012.
  36. "SO/IEC 23270:2018 Information technology — Programming languages — C#". ISO (in English). Retrieved 2020-11-26.
  37. Mariani, Rico (October 5, 2009). "My History of Visual Studio (Part 1) – Rico Mariani's Performance Tidbits". Rico Mariani's Performance Tidbits.
  38. Kovacs, James (September 7, 2007). "C#/.NET History Lesson". Retrieved June 18, 2009.
  39. Hejlsberg, Anders (October 1, 2008). "The A-Z of Programming Languages: C#". Computerworld. Archived from the original on April 2, 2015. Retrieved June 22, 2014.
  40. "Microsoft C# FAQ". Microsoft. Archived from the original on February 14, 2006. Retrieved March 25, 2008.
  41. "F# FAQ". Microsoft Research. Archived from the original on February 18, 2009. Retrieved June 18, 2009.
  42. Simon, Raphael; Stapf, Emmanuel; Meyer, Bertrand (June 2002). "Full Eiffel on the .NET Framework". Microsoft. Retrieved June 18, 2009.
  43. "What's new in the C# 2.0 Language and Compiler". Microsoft. Archived from the original on December 18, 2010. Retrieved 11 June 2014.
  44. Hejlsberg, Anders; Torgersen, Mads (April 30, 2007). "Overview of C# 3.0". Microsoft Developer Network. Microsoft. Retrieved 11 June 2014.
  45. 45.0 45.1 "Using C# 3.0 from .NET 2.0". Danielmoth.com. May 13, 2007. Retrieved October 4, 2012.
  46. Hejlsberg, Anders. "Future directions for C# and Visual Basic". C# lead architect. Microsoft. Archived from the original on September 23, 2011. Retrieved September 21, 2011.
  47. "An Introduction to New Features in C# 5.0". MSDN Blogs. Microsoft. Archived from the original on June 4, 2014. Retrieved 11 June 2014.
  48. "Language feature implementation status". github. Microsoft. Archived from the original on January 12, 2016. Retrieved 13 February 2015.
  49. "What's new in C# 7". Microsoft Docs. 2016-12-21.
  50. "New Features in C# 7.0". .NET Blog. March 9, 2017. Retrieved 2017-06-09.
  51. "Visual Studio 2017 version 15.0 Release Notes". docs.microsoft.com. April 11, 2023. Retrieved 2023-04-19.
  52. "What's new in C# 7.1". Microsoft Docs. Retrieved 2017-10-09.
  53. "Visual Studio 2017 version 15.3 Release Notes". docs.microsoft.com. April 11, 2023. Retrieved 2023-04-19.
  54. "What's new in C# 7.2". Microsoft Docs. Retrieved 2017-11-26.
  55. "Visual Studio 2017 version 15.5 Release Notes". docs.microsoft.com. April 11, 2023. Retrieved 2023-04-19.
  56. "What's new in C# 7.3". Microsoft Docs. Retrieved 2018-06-23.
  57. "Visual Studio 2017 version 15.7 Release Notes". docs.microsoft.com. July 13, 2022. Retrieved 2023-04-19.
  58. "What's new in C# 8.0". Microsoft Docs. March 9, 2023.
  59. "Visual Studio 2019 version 16.3 Release Notes". docs.microsoft.com. April 11, 2023. Retrieved 2023-04-19.
  60. BillWagner. "What's new in C# 9.0 - C# Guide". docs.microsoft.com (in English). Retrieved 2020-10-15.
  61. "Visual Studio 2019 version 16.8 Release Notes". docs.microsoft.com. April 11, 2023. Retrieved 2023-04-19.
  62. "What's new in C# 10". docs.microsoft.com (in English). Retrieved 2021-11-10.
  63. "Visual Studio 2022 version 17.0 Release Notes". docs.microsoft.com. Retrieved 2023-04-19.
  64. "What's new in C# 11". docs.microsoft.com (in English). Retrieved 2022-08-08.
  65. "Visual Studio 2022 version 17.4 Release Notes". docs.microsoft.com. Retrieved 2023-04-19.
  66. Novák et al. 2010.
  67. 67.0 67.1 67.2 67.3 67.4 Skeet 2019.
  68. BillWagner. "अभिव्यक्ति के पेड़ (सी #)". docs.microsoft.com (in English). Retrieved 2021-05-14.
  69. dotnet-bot. "System.Reflection.Emit Namespace". learn.microsoft.com (in English). Retrieved 2023-04-28.
  70. McAllister, Neil (2011-10-20). "Microsoft's Roslyn: Reinventing the compiler as we know it". InfoWorld (in English). Retrieved 2022-03-05.
  71. "पेश है C# सोर्स जेनरेटर". .NET Blog (in English). 2020-04-29. Retrieved 2021-05-14.
  72. "आभासी (सी # संदर्भ)". docs.microsoft.com (in English). September 15, 2021.
  73. "ऑटो-कार्यान्वित गुण (सी # प्रोग्रामिंग गाइड)". Retrieved September 12, 2020.
  74. "निर्देश का उपयोग - सी # संदर्भ". Microsoft Docs (in English). Retrieved 2019-04-14.
  75. BillWagner. "असुरक्षित कोड, डेटा के संकेत और फ़ंक्शन संकेत". docs.microsoft.com (in English). Retrieved 2021-06-20.
  76. "उपयोगकर्ता परिभाषित अपवाद कैसे बनाएं". Retrieved September 12, 2020.
  77. Venners, Bill; Eckel, Bruce (August 18, 2003). "The Trouble with Checked Exceptions". Retrieved March 30, 2010.
  78. BillWagner. "ऑपरेटर ओवरलोडिंग - सी # संदर्भ". docs.microsoft.com (in English). Retrieved 2021-06-20.
  79. Zhang, Xue Dong; Teng, Zi Mu; Zhao, Dong Wang (September 2014). "डेटाबेस एक्सेस टेक्नोलॉजी Under.NET Framework का अनुसंधान". Applied Mechanics and Materials. 644–650: 3077–3080. doi:10.4028/www.scientific.net/AMM.644-650.3077. S2CID 62201466. ProQuest 1565579768.
  80. Otey, Michael (February 2006). "LINQ भविष्य के लिए". SQL Server Magazine. Vol. 8, no. 2. pp. 17–21. ProQuest 214859896.
  81. Sheldon, William (November 2010). "LINQ में नई सुविधाएँ". SQL Server Magazine. Vol. 12, no. 11. pp. 37–40. ProQuest 770609095.
  82. BillWagner (2021-09-15). "LINQ में क्वेरी सिंटेक्स और विधि सिंटेक्स (सी#)". learn.microsoft.com (in English). Retrieved 2023-05-23.
  83. erikdietrich (March 9, 2023). "सी # - सी # गाइड का इतिहास". learn.microsoft.com (in English). Retrieved 2023-04-28.
  84. The functional journey of C# - Mads Torgersen - NDC Copenhagen 2022 (in English), retrieved 2023-05-15
  85. "क्लोजर की सुंदरता". csharpindepth.com. Retrieved 2023-04-28.
  86. 86.0 86.1 BillWagner. "अनाम कार्य - सी # प्रोग्रामिंग गाइड". docs.microsoft.com (in English). Retrieved 2021-05-15.
  87. 87.0 87.1 87.2 "What's New in C# 7.0". Microsoft Docs (in English). Retrieved 2019-04-14.
  88. "C# 9.0 on the record". .NET Blog (in English). 2020-11-10. Retrieved 2021-05-15.
  89. BillWagner (2022-06-30). "init कीवर्ड - सी # संदर्भ". learn.microsoft.com (in English). Retrieved 2023-05-19.
  90. The .NET Compiler Platform, .NET Platform, 2023-04-28, retrieved 2023-04-28
  91. 91.0 91.1 91.2 91.3 Archer 2001.
  92. Lippert, Eric (March 19, 2009). "प्रतिनिधित्व और पहचान". Fabulous Adventures In Coding. Blogs.msdn.com. Retrieved October 4, 2012.
  93. "फ्रेमवर्क पुस्तकालय". docs.microsoft.com. April 19, 2023.
  94. BillWagner. "What's new in C# 9.0 - C# Guide". docs.microsoft.com (in English). Retrieved 2021-05-14.
  95. BillWagner. "मुख्य() और कमांड लाइन तर्क". docs.microsoft.com (in English). Retrieved 2021-08-05.
  96. "ओपन सोर्स डेवलपर्स के लिए पेटेंट प्रतिज्ञा". March 16, 2023.
  97. "Patent Cooperation Agreement - Microsoft & Novell Interoperability Collaboration". Microsoft. November 2, 2006. Archived from the original on May 17, 2009. Retrieved July 5, 2009. Microsoft, on behalf of itself and its Subsidiaries (collectively "Microsoft"), hereby covenants not to sue Novell's Customers and Novell's Subsidiaries' Customers for infringement under Covered Patents of Microsoft on account of such a Customer's use of specific copies of a Covered Product as distributed by Novell or its Subsidiaries (collectively "Novell") for which Novell has received Revenue (directly or indirectly) for such specific copies; provided the foregoing covenant is limited to use by such Customer (i) of such specific copies that are authorized by Novell in consideration for such Revenue, and (ii) within the scope authorized by Novell in consideration for such Revenue.
  98. "Definitions". Microsoft. November 2, 2006. Retrieved July 5, 2009.
  99. Steinman, Justin (November 7, 2006). "Novell Answers Questions from the Community". Retrieved July 5, 2009. We maintain that Mono does not infringe any Microsoft patents.
  100. "Covenant to Downstream Recipients of Moonlight - Microsoft & Novell Interoperability Collaboration". Microsoft. September 28, 2007. Archived from the original on September 23, 2010. Retrieved March 8, 2008. "Downstream Recipient" means an entity or individual that uses for its intended purpose a Moonlight Implementation obtained directly from Novell or through an Intermediate Recipient... Microsoft reserves the right to update (including discontinue) the foregoing covenant... "Moonlight Implementation" means only those specific portions of Moonlight 1.0 or Moonlight 1.1 that run only as a plug-in to a browser on a Personal Computer and are not licensed under GPLv3 or a Similar License.
  101. 101.0 101.1 "RyuJIT ट्रांज़िशन पूरा हो गया है!". microsoft.com. June 19, 2018. Archived from the original on July 19, 2019. Retrieved July 20, 2021.
  102. "प्रबंधित निष्पादन प्रक्रिया". microsoft.com. Archived from the original on December 23, 2017. Retrieved July 20, 2021.
  103. "coreclr/src/jit/". github.com. Archived from the original on January 9, 2019. Retrieved July 20, 2021.
  104. "सी # गाइड". docs.microsoft.com.
  105. "5.0.8". microsoft.com. Archived from the original on April 23, 2020. Retrieved July 20, 2021.
  106. "Mitigation: New 64-bit JIT Compiler". microsoft.com. Archived from the original on April 5, 2018. Retrieved July 20, 2021.
  107. Etcheverry, Ignacio (October 21, 2017). "गोडोट में सी# का परिचय". Godot Engine. Archived from the original on October 26, 2018. Retrieved October 26, 2018.


अग्रिम पठन


बाहरी संबंध