Розніца паміж версіямі "C Sharp"

24 байты дададзена ,  5 гадоў таму
др
др
др (→‎Адрозныя магчымасці: арфаграфія)
=== Адрозныя магчымасці ===
<!--: ''Note: The following description is based on the language standard and other documents listed in the «[[#External links|External links]]» section.''-->
Паводле дызайну, C# — гэта мова праграмавання, якая найбольш проста адлюстроўвае ляжачую ў аснове агульную моўную інфраструктуру ({{lang-en|Common Language Infrastructure, CLI}}).<ref>{{cite book|title=Visual Studio 2010 and .NET 4 Six-in-One|year=2010|publisher=Wrox Press|isbn=0470499486}}</ref> Большасць яе ўбудаваных тыпаў адпавядае тыпам-значэнням, рэалізаваным фрэймворкам CLI. Аднак, спецыфікацыі мовы не гавораць пра патрабаванні да генерацыі коду кампілятарам, г.зн., не гаворыцца, што кампілятар C# мусіць мець на мэце Common Language Runtime, ці генераваць агульную прамежкавую мову ({{lang-en|Common Intermediate Language, CIL}}), ці генерыраваць іншы спецыфічны фармат. Тэарэтычна, кампілятар C# можа генераваць машынны код, як традыцыйныя кампілятары C++ ці [[Фартран]]а.
 
Вось некаторыя заўважныя магчымасці C#, якія адрозніваюць яе ад C і C++ (і Java, дзе пазначана):
* Прасторы імёнаў у C# прадстаўляюць такі ж самы ўзровень ізаляцыі коду, як і пакункі ў Java ({{lang-en|package}}) ці прасторы імёнаў у C++ ({{lang-en|namespace}}); правілы і магчымасці вельмі падобныя на пакунак Java.
* C# падтрымлівае строгі булеўскі тып ({{lang-en|bool}}). Выразы, якія прымаюць умовы, такія як ''while'' і ''if'', патрабуюць такі тып выразу, які рэалізуе аператар ''true'', такі як булеўскі тып. У той час як C++ таксама мае булеўскі тып, апошні можа быць свабодна канверсаваны ў і з цэлалікавага тыпу, і такія выразы, як ''if(a)'' патрабуюць толькі, каб ''a'' можна было ператварыць у булеўскі тып, дазваляючы ''a'' быць цэлалікавым ці ўказальнікам. C# забараняе такі падыход, калі «цэлы лік азначае true ці false», засноўваючыся на меркаванні, што патрабаванне да праграміста выкарыстоўваць выразы, якія вяртаюць дакладна булеўскі тып, засцерагае ад пэўнага тыпу праграмісцкіх памылак, распаўсюджаных у C ці C++, такіх як <code>1=if (a = b)</code> (ужыванне прысвойвання <code>=</code> замест роўнасці <code>==</code>).
* У C#, указальнікі на адрасы ў памяці могуць быць ужытыя толькі ўнутры блока, асобна пазначанага як ''небяспечны'' (''unsafe''), а праграмы з небяспечным кодам патрабуюць адпаведных дазволаў на запуск. Доступ да аб'ектаў у большасці выпадкаў адбываецца праз бяспечныя спасылкі на аб'ект, якія заўжды ўказваюць на «жывы» аб'ект, ці маюць строга вызначанае значэнне ''null''; немагчыма атрымаць спасылку на «мёртвы» аб'ект (апрацаваны працэдурай зборкі смецця), ці на выпадковы блок памяці. Небяспечны ўказальнік можа ўказваць на экзэмпляр тыпу значэнне, масіў, радок, ці блок памяці, размешчаны ў стэку. Код без пазнакі "«небяспечны"» можа захоўваць і змяняць указальнікі праз тып <code>System.IntPtr</code>, але не можа разымяноўваць іх.
* Кіраваная памяць не можа быць яўна вызвалена; замест гэтага, працуе аўтаматычная зборка смецця. Зборка смецця вырашае праблему ўцечкі памяці ({{lang-en|memory leak}}), вызваляючы праграміста ад адказнасці за вызваленне памяці, якая больш не патрэбна.
* У дадатак да канструкцыі <code>try...catch</code> для апрацоўкі выключэнняў C# мае канструкцыю <code>try...finally</code>, якая гарантуе выкананне коду ў блоку <code>finally</code> незалежна ад таго, здарылася выключэнне ці не.
* C# мае яўную падтрымку каварыянтрасці і контр-варыянтнасці ў абагульненых тыпах, у адрозненне ад C++, якая ў пэўнай ступені падтрымлівае контр-варыянтнасць проста праз семантыку вяртаных віртуальнымі метадамі тыпаў.
* Члены пералічэння змяшчаюцца ў іх уласны абсяг бачнасці ({{lang-en|scope}}).
* C# прадстаўляе ўласцівасці як сінтаксічны цукар для распаўсюджанараспаўсюджанага выпадку, калі пара метадаў, аксесар ({{lang-en|getter}}) і мутатар ({{lang-en|setter}}) інкапсулююць аперацыі над адным атрыбутам класа. Не трэба пісаць залішнія сігнатуры метадаў для рэалізацыі гэтарагетара і сэтара, а доступ да ўласцівасці можна атрымаць праз сінтаксіс атрыбута, замест даўжэйшых выклікаў метадаў.
* У C# няма правераных выключэнняў ({{lang-en|checked exceptions}}), у адрозненне ад Java. Гэта было свядомае рашэнне, заснаванае на меркаваннях маштабавальнасці і версіявальнасці.<ref>{{cite web
| url = http://www.artima.com/intv/handcuffs.html