wd wp Пошук:

C Sharp

C# (вымаўляецца сі шарп) — шматпарадыгмавая мова праграмавання, якая ахоплівае строга тыпізаванае, імператыўнае, дэкларатыўнае, функцыйнае, працэдурнае, абагульненае, аб’ектна-арыентаванае і кампанентна-арыентаванае праграмаванне. Распрацавана фірмай Microsoft у межах ініцыятывы .NET, пазней зацверджана ў якасці стандартаў Ecma (ECMA-334) і ISO (ISO/IEC 23270:2006). C# — адна з моў праграмавання, спраектаваных для Common Language Infrastructure. C# пабудавана на сінтаксісе і семантыцы C++, дазваляючы праграмістам на мове C атрымаць перавагі платформы .NET і CLR (common language runtime).[5]

C# нацэлена быць простай, сучаснай, аб’ектна-арыентаванай мовай агульнага прызначэння.[6] Каманду распрацоўшчыкаў узначальвае Андэрс Хейлсберг. Найноўшая версія C# 6.0 выдадзена 20 ліпеня 2015 г.[7]

Праектныя мэты

Стандарт ECMA пералічвае наступныя мэты распрацоўкі C#:[6]

Назва

Нота до-дыез

Назва «C sharp» натхнёна музычнай натацыяй, дзе дыез (англ.: sharp) паказвае, што пазначаная нота павінна гучаць на паўтона вышэй.[8] Гэта падобна на назву мовы C++, дзе «++» азначае, што зменная мусіць быць павялічана на 1. Знак “дыез” таксама нагадвае лігатуру з чатырох сімвалаў «+» (у рашотцы два на два), паглыбляючы меркаванне, што мова з’яўляецца прырашчэннем C++.

З-за тэхнічных абмежаванняў на адлюстраванне (стандартныя шрыфты, браўзеры і да т.п.) і дзякуючы таму факту, што знака “дыез” (♯) няма на стандартнай клавіятуры, быў выбраны сімвал рашоткі (#) для прадстаўлення знака “дыез” у назве мовы праграмавання.[9] Гэта пагадненне адлюстравана ў спецыфікацыях мовы C# ECMA-334.[6] Аднак, калі гэта дарэчна (напрыклад, у рэкламе ці ў мастацтве[10]), Майкрасофт ужывае музычны знак.

Суфікс быў ужыты для некалькіх моў платформы .NET, якія з’яўляюцца варыянтамі існых моў, уключна з J# (мова платформы .NET, створаная Майкрасофт як вытворная ад Java 1.1), A#Ады), і функцыйнай мовай F#.[11] Першапачатковая рэалізацыя Eiffel for .NET называлася Eiffel#,[12] цяпер назва не ўжываецца, паколькі мова Eiffel падтрымліваецца поўнасцю. Суфікс таксама быў ужыты ў назвах праграмных бібліятэк, такіх як Gtk# (абгортка для GTK+ і іншых бібліятэк GNOME), Cocoa#.

Гісторыя

У час распрацоўкі платформы .NET Framework, былі напісаны бібліятэкі класаў з выкарыстаннем сістэмы кампіляцыі кіраванага коду пад назвай Simple Managed C (SMC).[13][14][15] У студзені 1999, Андэрс Хейлсберг сабраў каманду, каб стварыць новую мову, якая на той час звалася Cool, што расшыфроўваецца як «C-like Object Oriented Language».[16] У Майкрасофт разглядалі магчымасць захаваць назву «Cool» у якасці канчатковай назвы мовы, але вырашылі не рабіць гэтага з меркаванняў гандлёвых марак. Да таго часу, як праект .NET быў публічна абвешчаны ў ліпені 2000 на Professional Developers Conference, мова была перайменавана ў C#, а бібліятэкі класаў і рантайм ASP.NET былі партаваны на C#.

Галоўным канструктарам і вядучым архітэктарам C# у Майкрасофт з’яўляецца Андэрс Хейлсберг. Раней ён удзельнічаў у распрацоўцы Turbo Pascal, Embarcadero Delphi (да гэтага CodeGear Delphi, Inprise Delphi і Borland Delphi), і Visual J++. У інтэрв’ю і тэхнічных дакументах ён сцвярджае, што недахопы большасці шырокаўжываных моў праграмавання (г.зн. C++, Java, Delphi і Smalltalk) прывялі да стварэння Common Language Runtime (CLR), што, у сваю чаргу, вызначыла дызайн мовы C#.

Джэймс Гослінг, стваральнік мовы праграмавання Java, і Біл Джой, сузаснавальнік Sun Microsystems, пачынальніка Java, назвалі C# «імітацыяй» Java; Гослінг далей сказаў, што «[C#] свайго роду Java з выдаленай надзейнасцю, прадукцыйнасцю і бяспекай.»[17][18] Клаус Крэфт і Анжэліка Лангер (аўтары кнігі C++ streams) заявілі ў сваім блогу, што «Java і C# амаль ідэнтычныя мовы праграмавання. Нуднае паўтарэнне, якому бракуе інавацый,»[19] «Наўрад ці нехта будзе сцвярджаць, што Java ці C# — рэвалюцыйныя мовы праграмавання, якія змянілі спосаб, якім мы пішам праграмы,» і «C# пазычыў шмат у Java — і наадварот. Цяпер, калі C# падтрымлівае абгорткі (англ.: boxing) і разгорткі (англ.: unboxing), мы будзем мець вельмі падобную функцыю ў Java.»[20] У ліпені 2000, Андэрс Хейлсберг сказаў, што C# «не клон Java» і «нашмат бліжэй да C++» у сваім дызайне.[21]

Ад выдання C# 2.0 у лістападзе 2005, мовы C# і Java развіваліся па больш разбежных траекторыях, становячыся менш падобнымі. Адно з першых галоўных разыходжанняў з’явілася з даданнем джэнерыкаў (англ.: generics) у абедзве мовы, з абсалютна рознымі рэалізацыямі. C# выкарыстоўвае матэрыялізацыю (англ.: reification), каб прадставіць “першакласныя” аб’екты джэнерыкаў, якія можна ўжываць як любы іншы клас, з генерацыяй кода падчас загрузкі класа.[22] Насупраць, джэнерыкі ў Java — па-сутнасці асаблівасць сінтаксісу мовы, яны не ўплываюць на генераваны байт-код, таму што кампілятар выконвае сціранне тыпу (англ.: type erasure) на інфармацыі аб тыпе джэнерыка пасля таго, як упэўніўся ў яе правільнасці.[23]

Далей C# дадала некалькі асноўных магчымасцяў, каб дастасаваць праграмаванне ў функцыянальным стылі, што прывяло да выпуску пашырэння LINQ у C# 3.0, з падтрымкаю лямбда-выразаў (англ.: lambda expression), метадаў пашырэння (англ.: extension method), і ананімных тыпаў.[24] Гэтыя магчымасці дазваляюць праграмістам на C# выкарыстоўваць тэхнікі функцыянальнага праграмавання, такія як замкненні (англ.: closures), калі іх прымяненне мэтазгодна. Пашырэнні LINQ і функцыянальны імпарт дапамагаюць распрацоўшчыкам паменшыць колькасць «шаблоннага» коду, які ўключаны ў такія агульныя задачы, як запыт да базы звестак, разбор xml-файла, ці пошук у структуры дадзеных, пераносячы акцэнт на дзейную логіку праграмы, што дапамагае палепшыць чытэльнасць і суправаджальнасць.[25]

C# мела талісман, званы Эндзі (у гонар Андэрса Хейлсберга). Не ўжываецца з 29 студзеня 2004 г.[26]

C# была першапачаткова пададзена на разгляд падкамітэту ISO JTC 1/SC 22[27] як ISO/IEC 23270:2003,[28] які цяпер зняты. Пазней ухвалена ў рамках ISO/IEC 23270:2006.[29]

Версіі

Цягам свайго развіцця, мова C# прайшла праз некалькі версій:

Версія CLR[30] Спецыфікацыі мовы Дата .NET Framework Visual Studio
ECMA ISO/IEC Microsoft
C# 1.0 1.0 Снежань 2002 Красавік 2003 Студзень 2002 Студзень 2002 .NET Framework 1.0 Visual Studio .NET 2002
C# 1.2 1.1 Кастрычнік 2003 Красавік 2003 .NET Framework 1.1 Visual Studio .NET 2003
C# 2.0 2.0 Чэрвень 2006 Верасень 2006 Верасень 2005[A] Лістапад 2005 .NET Framework 2.0 Visual Studio 2005
C# 3.0 2.0
2.0 SP1
[B] [B] Жнівень 2007 Лістапад 2007

.NET Framework 2.0 (За выняткам пашырэнняў LINQ/Query)[31]
.NET Framework 3.0 (За выняткам пашырэнняў LINQ/Query)[31]
.NET Framework 3.5

Visual Studio 2008
Visual Studio 2010
C# 4.0 4.0[C] [B] [B] Красавік 2010 Красавік 2010 .NET Framework 4 Visual Studio 2010
C# 5.0 4.5[D] [B] [B] Чэрвень 2013 Жнівень 2012 .NET Framework 4.5 Visual Studio 2012
A  Дакумент спецыфікацый Microsoft C# 2.0 утрымлівае толькі новыя магчымасці 2.0. Старэйшыя магчымасці гл. у спецыфікацыі 1.2 вышэй.
B  Няма спецыфкацый ECMA ці ISO/IEC для C# 3.0, 4.0 ці 5.0.
C  Не было версіі CLR 3.0.
D  У дакументацыі CLR апісваецца як 4.5, але Environment.Version паказвае 4.0.[32]
Падсумаванне версій
C# 2.0C# 3.0C# 4.0C# 5.0 [33]Будучыня
Дададзены
функцыі
  • Джэнерыкі
  • Частковыя тыпы
  • Ананімныя метады
  • Ітэратары
  • Абнульвальныя тыпы
  • Прыватныя сетары (уласцівасці)
  • Канверсія груп метадаў (дэлегаты)
  • Каварыянтнасць і контр-варыянтнасць
  • Статычныя класы
  • Няяўна тыпізаваныя лакальныя зменныя
  • Ініцыялізатары аб’ектаў і калекцый
  • Аўтаматычна рэалізаваныя ўласцівасці
  • Ананімныя тыпы
  • Метады пашырэнняў
  • Выразы-запыты
  • Лямбда-выразы
  • Дрэвы выразаў
  • Частковыя метады
  • Дынамічнае звязванне
  • Іменаваныя і апцыянальныя аргументы
  • Каварыянтнасць і контр-варыянтнасць джэнерыкаў
  • Убудаваныя тыпы interop («NoPIA»)
  • Асінхронныя метады
  • Атрыбуты інфармацыі абанентаў
C# 5.0
  • Кампілятар-як-паслуга (Roslyn)
C# 6.0
  • Імпарт членаў тыпу ў прастору імён
  • Сціслы сінтаксіс для першасных канструктараў
  • Толькі-чытаныя ўласцівасці
  • Выразы ўласцівасцей (лямбды ўласцівасцей)
  • Выразы метадаў
  • Масівы параметраў для інтэрфейсаў IEnumerable
  • Сціслая праверка на нуль
  • Множныя вяртаныя велічыні
  • Інтэрфейс тыпу канструктара

Сінтаксіс

C# мае наступны сінтаксіс:

Адрозныя магчымасці

Паводле дызайну, C# — гэта мова праграмавання, якая найбольш проста адлюстроўвае ляжачую ў аснове агульную моўную інфраструктуру (англ.: Common Language Infrastructure, CLI).[34] Большасць яе ўбудаваных тыпаў адпавядае тыпам-значэнням, рэалізаваным фрэймворкам CLI. Аднак, спецыфікацыі мовы не гавораць пра патрабаванні да генерацыі коду кампілятарам, г.зн., не гаворыцца, што кампілятар C# мусіць мець на мэце Common Language Runtime, ці генераваць агульную прамежкавую мову (англ.: Common Intermediate Language, CIL), ці генерыраваць іншы спецыфічны фармат. Тэарэтычна, кампілятар C# можа генераваць машынны код, як традыцыйныя кампілятары C++ ці Фартрана.

Вось некаторыя заўважныя магчымасці C#, якія адрозніваюць яе ад C і C++ (і Java, дзе пазначана):

Агульная сістэма тыпаў

C# мае ўніфікаваную сістэму тыпаў. Гэта сістэма мае назву “агульная сістэма тыпаў” (англ.: Common Type System, скарочана CTS).[36]

Уніфікаваная сістэма тыпаў падразумявае, што ўсе тыпы, уключаючы прымітывы, такія як цэлыя лікі, з’яўляюцца падкласамі класа System.Object. Напрыклад, кожны тып наследуе метад ToString().

Катэгорыі тыпаў даных

CTS раздзяляе тыпы даных на дзве катэгорыі:[36]

  1. Спасылачныя тыпы
  2. Тыпы-значэнні

Асобнікі тыпу-значэння не маюць ні спасылачнай тоеснасці, ні спасылачнай семантыкі параўнання — параўнанне на роўнасць і няроўнасць для тыпаў-значэнняў параўноўвае фактычнае значэнне даных у асобніку, калі адпаведныя аператары параўнання не перагружаны. Тыпы-значэнні з’яўляюцца вытворнымі ад System.ValueType, заўжды маюць прадвызначанае значэнне, і могуць быць заўжды створаны і скапіяваны. Сярод іншых абмежаванняў, накладзеных на тыпы-значэнні: яны не могуць быць вытворнымі адзін ад другога (але могуць рэалізоўваць інтэрфейсы), і не могуць мець яўны прадвызначаны канструктар (без параметраў). Прыкладамі тыпаў-значэнняў з’яўляюцца ўсе прымітыўныя тыпы, такія як int (знакавы 32-бітавы цэлы лік), float (32-бітавы лік з плыўной коскай IEEE), char (16-бітавы асобнік Унікоду), і System.DateTime (ідэнтыфікуе канкрэтны момант часу з дакладнасцю да нанасекундаў). Іншыя прыклады — enum (пералічэнні) і struct (вызначаныя карыстальнікам структуры).

Насупраць, да спасылачных тыпаў адносіцца паняцце спасылачнай тоеснасці — кожны асобнік спасылачнага тыпу па сваёй сутнасці адрозніваецца ад любога іншага, нават калі звесткі ў абодвух асобніках адны і тыя ж. Гэта адбіваецца на прадвызначаных параўнаннях на роўнасць і няроўнасць для спасылачных тыпаў, якія правяраюць хутчэй спасылачную, чым структурную роўнасць, калі адпаведныя аператары не перагружаны (як у выпадку з System.String). Увогуле, не заўжды магчыма ні стварыць асобнік спасылачнага тыпу, ні скапіяваць наяўны асобнік, ці параўнаць значэнні двух наяўных асобнікаў, хаця пэўныя спасылачныя тыпы могуць прадстаўляць такія магчымасці, даючы агульнадаступны канструктар ці рэалізуючы адпаведны інтэрфейс (такі, як ICloneable ці IComparable). Прыкладамі спасылачнага тыпу з’яўляюцца object (першасны базавы клас для ўсіх іншых класаў C#), System.String (радок сімвалаў Унікоду), і System.Array (базавы клас для ўсіх масіваў C#).

Абедзве катэгорыі можна пашыраць з дапамогаю тыпаў, вызначаных карыстальнікам.

Boxing і unboxing

Boxing — аперацыя па пераўтварэнні аб’екта тыпу-значэння ў велічыню адпаведнага спасылачнага тыпу.[36] У C# гэта робіцца няяўна.

Unboxing — аперацыя па пераўтварэнні велічыні спасылачнага тыпу, атрыманай папярэдняй аперацыяй boxing, у велічыню тыпу-значэння.[36] Unboxing у C# патрабуе яўнага прывядзення тыпаў (англ.: type cast). Аб’ект тыпу T, над якім была зроблена аперацыя boxing, можа быць прыведзены толькі да тыпу T (ці абнульвальнага T).[37]

Прыклад:

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

Джэнерыкі

Джэнерыкі былі дададзены ў мову C# у версіі 2.0. Джэнерыкі выкарыстоўваюць параметры тыпу, што дазваляе праектаваць класы альбо метады, якія не ўказваюць выкарыстаны тып да таго часу, пакуль не будзе створаны асобнік класа ці метаду. Галоўнай перавагай з’яўляецца тое, што можна ўжываць параметры тыпу для джэнерыкаў, каб ствараць класы і метады, якія можна выкарыстаць без выдаткаў на прывядзенне тыпаў у час выканання ці на аперацыі boxing, як паказана тут:[38]

// Declare the generic class.

public class GenericList<T>
\{
    void Add(T input) \{ \}
\}

class TestGenericList
\{
    private class ExampleClass \{ \}
    static void Main()
    \{
        // Declare a list of type int.
        GenericList<int> list1 = new GenericList<int>();

        // Declare a list of type string.
        GenericList<string> list2 = new GenericList<string>();

        // Declare a list of type ExampleClass.
        GenericList<ExampleClass> list3 = new GenericList<ExampleClass>();
    \}
\}

У параўнанні з шаблонамі C++, джэнерыкі C# могуць даць палепшаную бяспеку, але ў той жа час у чымсьці абмежаваныя магчымасці.[39] Напрыклад, нельга выклікаць арыфметычныя аператары над тыпамі джэнерыкаў у C#.[40]

Прэпрацэсар

C# прадстаўляе «дырэктывы прэпрацэсара»[41] (хаця не мае «сапраўднага» прэпрацэсара), заснаваныя на прэпрацэсары мовы C, якія дазваляюць праграмісту вызначаць сімвалы, але не дазваляюць макрасы. Таксама прадстаўляюцца умоўныя аператары, такія як #if, #endif, і #else. Дырэктывы кшталту #region даюць падказку тэкставаму рэдактару па згортванні коду.

public class Foo
\{
    #region Constructors
    public Foo() \{\}
    public Foo(int firstParam) \{\}
    #endregion

    #region Procedures
    public void IntBar(int firstParam) \{\}
    public void StrBar(string firstParam) \{\}
    public void BoolBar(bool firstParam) \{\}
    #endregion
\}

Каментарыі

C# выкарыстоўвае двайны слэш (//), каб паказаць, што рэшта радка — гэта каментарый. Такі стыль каментарыяў атрыманы ў спадчыну ад C++.

public class Foo
\{
    // a comment
    public static void Bar(int firstParam) \{\}  // also a comment
\}

Шматрадковы каментарый можна пачаць слэшам і зорачкай (/*) і закончыць зорачкай і слэшам (*/). Гэта спадчына стандартнай мовы C.

public class Foo
\{
    /\* A Multi-Line
 comment \*/
    public static void Bar(int firstParam) \{\}
\}

Сістэма XML-дакументацыі

Сістэма дакументацыі ў C# падобная на Javadoc у Java, але заснавана на XML. У цяперашні час кампілятар C# падтрымлівае два метады дакументавання.

Аднарадковыя дакументацыйныя каментарыі, такія як шырока распаўсюджаныя ў згенераваным Visual Studio кодзе, уяўляюць сабой радок, што пачынаецца з ///.

public class Foo
\{
    /// <summary>A summary of the method.</summary>
    /// <param name="firstParam">A description of the parameter.</param>
    /// <remarks>Remarks about the method.</remarks>
    public static void Bar(int firstParam) \{\}
\}

Шматрадковыя дакументацыйныя каментарыі, хоць былі вызначаны ў спецыфікацыях мовы ў версіі 1.0, не падтрымліваліся да выпуску .NET 1.1.[42] Гэтыя каментарыі пачынаюцца з слэша і дзвюх зорачак (/**) і заканчваюцца дзвюма зорачкамі і слэшам (*/).[43]

public class Foo
\{
    /\*\* <summary>A summary of the method.</summary>
 \* <param name="firstParam">A description of the parameter.</param>
 \* <remarks>Remarks about the method.</remarks> \*/
    public static void Bar(int firstParam) \{\}
\}

Заўвага: ёсць некаторыя строгія крытэрыі датычна прабелаў і XML-дакументацыі пры выкарыстанні тэхнікі слэш-зорачка-зорачка (/**).

Гэты блок коду:

/\*\*
 \* <summary>
 \* A summary of the method.</summary>\*/

утварае XML-каментарый, які адрозніваецца ад выніку гэтага блока:[43]

/\*\*
 \* <summary>
 A summary of the method.</summary>\*/

Сінтаксіс дакументацыйных каментарыяў і іх XML-разметка вызначаны ў ненарматыўным дадатку да стандарту C# ECMA. Гэты ж стандарт таксама вызначае правілы апрацоўкі такіх каментарыяў і іх пераўтварэнне ў звычайны XML-дакумент, з дакладнымі правіламі адлюстравання ідэнтыфікатараў CLI на звязаныя з імі элементы дакументацыі. Гэта дазваляе любому інтэграванаму асяроддзю распрацоўкі на C# ці іншаму інструменту знаходзіць дакументацыю для любога сімвала ў кодзе пэўным, цалкам вызначаным чынам.

Бібліятэкі

Спецыфікацыі мовы C# апісваюць мінімальны набор тыпаў і бібліятэк класаў, на даступнасць якіх разлічвае кампілятар. На практыцы, C# найчасцей ужываецца з якой-небудзь рэалізацыяй Common Language Infrastructure (CLI), што стандартызавана як ECMA-335 Common Language Infrastructure (CLI).

Прыклад «Hello, world»

Ніжэй прыведзена вельмі простая праграма на C#, версія класічнага прыкладу «Hello world»:

using System;

class Program
\{
    static void Main()
    \{
        Console.WriteLine("Hello, world!");
    \}
\}

Вынікам запуску праграмы будзе вывад на кансоль наступнага тэксту:

Hello, world!

Кожны радок праграмы мае прызначэнне:

using System;

Гэты радок гаворыць кампілятару ўжываць System у якасці магчымага прэфікса для тыпаў, выкарыстаных у зыходным кодзе. У гэтым выпадку, калі кампілятар бачыць ужыванне тыпу Console ніжэй у зыходным кодзе, ён спрабуе знайсці тып з назваю Console, спярша ў бягучай зборцы, потым ва ўсіх зборках, на якія яна спасылаецца. Пры гэтым кампілятару не ўдаецца знайсці такі тып, таму што насамрэч назва тыпу System.Console. Тады кампілятар спрабуе адшукаць тып з назваю System.Console, ужыўшы прэфікс System з сцверджання using, і гэтым разам паспяхова. Сцверджанне using дазваляе праграмісту вызначыць усе магчымыя прэфіксы, якія будуць выкарыстаны ў час кампіляцыі, замест выкарыстання поўнай назвы штораз.

class Program

Гэта вызначэнне класа. Усё, што ідзе далей паміж парай фігурных дужак, апісвае клас Program.

static void Main()

Гэты радок аб’яўляе метад класа, з якога пачынаецца выкананне праграмы. Рантайм .NET выклікае метад Main. (Заўвага: Main можна таксама выклікаць з іншага месца праграмы, як любы іншы метад, напрыклад з іншага метаду класа Program.) Ключавое слова static робіць метад даступным без стварэння асобніка класа Program. Уваходны пункт Main кожнай кансольнай праграмы мусіць быць аб’яўлены як static. Іначай, праграма будзе патрабаваць асобнік, а асобнік — праграму. Каб пазбегнуць гэтай невырашальнай цыклічнай залежнасці, кампілятар C# пры апрацоўцы кансольнай праграмы (кшталту апісанай вышэй) паведамляе пра памылку, калі няма метаду static Main. Ключавое слова void азначае, што метад Main не вяртае ніякага значэння.

Console.WriteLine(«Hello, world!»);

Гэты радок піша вывад. Console — гэта статычны клас у прасторы назваў System. Ён прадстаўляе кансольным праграмам інтэрфейс да стандартных патокаў уводу, вываду і памылак. Праграма выклікае метад WriteLine, які выводзіць на кансоль радок, пазначаны ў якасці параметра, "Hello world!".

Прыклад з графічным інтэрфейсам карыстальніка:

using System.Windows.Forms;

class Program
\{
    static void Main()
    \{
        MessageBox.Show("Hello, world!");
    \}
\}

Гэты прыклад падобны на папярэдні, з той розніцай, што генеруе дыялогавае вакно, якое ўтрымлівае паведамленне «Hello, world!», замест таго, каб пісаць яго ў кансоль.

Стандартызацыя і ліцэнзаванне

У жніўні 2000 г. Microsoft Corporation, Hewlett-Packard і Intel Corporation выступілі сумеснымі спонсарамі падання спецыфікацый C#, гэтаксама Common Language Infrastructure (CLI), ва ўстанову стандартызацыі Ecma International. У снежні 2001 ECMA выпусціла ECMA-334 Спецыфікацыі мовы C#. C# стала стандартам ISO ў 2003 (ISO/IEC 23270:2003 — Information technology — Programming languages — C#). Раней ECMA прыняла эквівалентныя спецыфікацыі як 2-е выданне C# у снежні 2002.

У чэрвені 2005 ECMA зацвердзіла 3-е выданне спецыфікацый C# і абнавіла ECMA-334. Сярод дапаўненняў — частковыя класы, ананімныя метады, абнульвальныя тыпы і джэнерыкі (аналагічныя шаблонам у C++).

У ліпені 2005 ECMA прадставіла стандарты і адпаведныя тэхнічныя рэгламенты ў ISO/IEC JTC 1 праз т.зв. працэс Fast-Track апошняга. Гэты працэс звычайна займае 6-9 месяцаў.

Вызначэнне мовы C# і агульнай моўнай інфраструктуры (англ.: Common Language Infrastructure, CLI) стандартызаваны ISO і Ecma, што прадстаўляе рацыянальную і недыскрымінацыйную ліцэнзійную абарону ад патэнтных прэтэнзій. Аднак, Майкрасофт выкарыстоўвае C# і CLI у сваёй бібліятэцы базавых класаў (англ.: Base Class Library, BCL), што з’яўляецца падмуркам яе уласніцкага фрэймворку .NET і прадстаўляе разнастайныя нестандартныя класы (пашырэнні ўводу-вываду, графічны інтэрфейс, вэб-сэрвісы і г.д.). Некаторыя выпадкі, калі патэнты Майкрасофт тычацца стандартаў, выкарыстаных у фрэймворку .NET, задакументаваны Майкрасофт, а адпаведныя патэнты даступны альбо на ўмовах RAND, альбо праз абяцанне адкрытых спецыфікацый (англ.: Microsoft Open Specification Promise), што прадстаўляе патэнтныя правы грамадскасці,[44] але ёсць пэўныя асцярогі і спрэчкі наконт існавання дадатковых, нявызначаных аспектаў, запатэнтаваных Майкрасофт, якія могуць абмежаваць незалежныя рэалізацыі поўнага фрэймоворку.

Майкрасофт пагадзілася не падаваць у суд на распрацоўшчыкаў праграм з адкрытым зыходным кодам за парушэнне патэнтаў у некамерцыйных праектах у частцы фрэймворку, што пакрыта OSP.[45] Таксама, Майкрасофт пагадзілася не прымяняць патэнты, якія тычацца прадуктаў кампаніі Novell, супраць плацежаздольных кліентаў кампаніі,[46] за выключэннем спісу прадуктаў, якія не згадваюць яўна C#, .NET ці рэалізацыю .NET ад фірмы Novell (Mono Project).[47] Аднак, Novell сцвярджае, што Mono не парушае ніводнага патэнта Майкрасофт.[48] Таксама, Майкрасофт зрабіла канкрэтнае пагадненне не ўжываць патэнтныя правы, звязаныя з браўзерным плагінам Moonlight, які залежыць ад Mono, пры ўмове, што ён атрыманы ад Novell.[49]

Рэалізацыі

Узорным кампілятарам мовы C# выступае Microsoft Visual C#, зыходны код якога адкрыты.[50]

Існуюць таксама іншыя кампілятары C#, часта поруч з рэалізацыяй агульнай моўнай інфраструктуры і бібліятэк класаў .NET:

Гл. таксама

Зноскі

  1. Torgersen, Mads New features in C# 4.0 (нявызн.). Microsoft (27 кастрычніка 2008). Праверана October 28, 2008.
  2. 1 2 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.”.
  3. Hamilton, Naomi The A-Z of Programming Languages: C# (нявызн.) (недаступная спасылка). Computerworld (1 кастрычніка 2008). — «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)»  Архівавана з першакрыніцы 24 сакавіка 2010. Праверана February 12, 2010.
  4. Cornelius, Barry Java 5 catches up with C# (нявызн.). University of Oxford Computing Services (1 снежня 2005). — «In my opinion, it is C# that has caused these radical changes to the Java language. (Barry Cornelius)»  Праверана June 18, 2009.
  5. C++ -> C#: What You Need to Know to Move from C++ to C#
  6. 1 2 3 C# Language Specification (4th ed.). Ecma International. June 2006. http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf. Retrieved on January 26, 2012.
  7. Announcing .NET Framework 4.6 (нявызн.). .NET Blog. Microsoft (20 ліпеня 2015).
  8. Kovacs, James C#/.NET History Lesson (нявызн.) (7 верасня 2007). Праверана June 18, 2009.
  9. Microsoft C# FAQ (нявызн.). Microsoft. Праверана March 25, 2008.
  10. Visual C#.net Standard (нявызн.) (JPEG). Microsoft (4 верасня 2003). Праверана June 18, 2009.
  11. F# FAQ (нявызн.). Microsoft Research. Праверана June 18, 2009.
  12. Full Eiffel on the .NET Framework (нявызн.). Microsoft (1 чэрвеня 2002). Праверана June 18, 2009.
  13. Zander, Jason Couple of Historical Facts (нявызн.) (24 лістапада 2008). Праверана February 23, 2009.
  14. C# 3.0 New Features (нявызн.) (недаступная спасылка). Архівавана з першакрыніцы 19 снежня 2008. Праверана June 9, 20010.
  15. Guthrie, Scott What language was ASP.Net originally written in? (нявызн.) (недаступная спасылка) (28 лістапада 2006). Архівавана з першакрыніцы 7 ліпеня 2011. Праверана February 21, 2008.
  16. Hamilton, Naomi The A-Z of Programming Languages: C# (нявызн.). Computerworld (1 кастрычніка 2008). Праверана October 1, 2008.
  17. Wylie Wong Why Microsoft’s C# isn’t (нявызн.). CNET: CBS Interactive (2002). Праверана November 14, 2009.
  18. Bill Joy Microsoft’s blind spot (нявызн.). cnet.com (7 лютага 2002). Праверана January 12, 2010.
  19. Klaus Kreft and Angelika Langer After Java and C# - what is next? (нявызн.) (2003). Праверана June 18, 2013.
  20. Klaus Kreft and Angelika Langer After Java and C# - what is next? (нявызн.). artima.com (3 ліпеня 2003). Праверана January 12, 2010.
  21. Osborn, John (August 1, 2000). Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg. O’Reilly Media. http://windowsdevcenter.com/pub/a/oreilly/windows/news/hejlsberg_0800.html. Retrieved on November 14, 2009
  22. Generics (C# Programming Guide) (нявызн.). Microsoft. Праверана March 21, 2011.
  23. Bracha, Gilad Generics in the Java Programming Language (нявызн.). Sun Microsystems (5 ліпеня 2004). Праверана March 21, 2011.
  24. Don Box and Anders Hejlsberg LINQ: .NET Language-Integrated Query (нявызн.). Microsoft (1 лютага 2007). Праверана March 21, 2011.
  25. Mercer, Ian Why functional programming and LINQ is often better than procedural code (нявызн.) (недаступная спасылка). abodit.com (15 красавіка 2010). Архівавана з першакрыніцы 11 ліпеня 2011. Праверана March 21, 2011.
  26. Andy Retires (нявызн.). Dan Fernandez’s Blog. Blogs.msdn.com (29 студзеня 2004). Праверана October 4, 2012.
  27. Technical committees - JTC 1/SC 22 - Programming languages, their environments and system software interfaces (нявызн.). ISO. Праверана October 4, 2012.
  28. ISO/IEC 23270:2003 - Information technology - C# Language Specification (нявызн.). Iso.org (23 жніўня 2006). Праверана October 4, 2012.
  29. ISO/IEC 23270:2006 - Information technology - Programming languages - C# (нявызн.). Iso.org (26 студзеня 2012). Праверана October 4, 2012.
  30. Common Language Runtime (CLR) (нявызн.). Microsoft Developer Network. Microsoft. Праверана 26 лістапада 2013.
  31. 1 2 Using C# 3.0 from .NET 2.0 (нявызн.). Danielmoth.com (13 мая 2007). Праверана October 4, 2012.
  32. Skeet, Jon (September 2013). C# in Depth (3rd ed.). Manning Publications Co.. p. 559. ISBN 9781617291340
  33. Hejlsberg, Anders Future directions for C# and Visual Basic (нявызн.) (недаступная спасылка). C# lead architect. Channel 9. Архівавана з першакрыніцы 23 верасня 2011. Праверана September 21, 2011.
  34. Visual Studio 2010 and .NET 4 Six-in-One. Wrox Press. 2010. ISBN 0470499486.
  35. The Trouble with Checked Exceptions (нявызн.) (18 жніўня 2003). Праверана March 30, 2010.
  36. 1 2 3 4 Archer, Tom (2001). “Part 2, Chapter 4: The Type System”. Inside C#. Redmond, Washington: Microsoft Press. ISBN 0-7356-1288-9.
  37. Lippert, Eric Representation and Identity (нявызн.). Fabulous Adventures In Coding. Blogs.msdn.com (19 сакавіка 2009). Праверана October 4, 2012.
  38. Generics (C# Programming Guide) (нявызн.). Microsoft. Праверана August 7, 2011.
  39. An Introduction to C# Generics (нявызн.). Microsoft.
  40. Differences Between C++ Templates and C# Generics (нявызн.). Microsoft.
  41. C# Preprocessor Directives (нявызн.). C# Language Reference. Microsoft. Праверана June 18, 2009.
  42. Horton, Anson C# XML documentation comments FAQ (нявызн.) (11 верасня 2006). Праверана December 11, 2007.
  43. 1 2 Delimiters for Documentation Tags (нявызн.). C# Programmer’s Reference. Microsoft (1 студзеня 1970). Праверана June 18, 2009.
  44. Interoperability Principles (нявызн.).
  45. Patent Pledge for Open Source Developers (нявызн.).
  46. Patent Cooperation Agreement - Microsoft & Novell Interoperability Collaboration (нявызн.). Microsoft (2 лістапада 2006). — «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.»  Праверана July 5, 2009.
  47. Definitions (нявызн.). Microsoft (2 лістапада 2006). Праверана July 5, 2009.
  48. Steinman, Justin Novell Answers Questions from the Community (нявызн.) (7 лістапада 2006). — «We maintain that Mono does not infringe any Microsoft patents.»  Праверана July 5, 2009.
  49. Covenant to Downstream Recipients of Moonlight - Microsoft & Novell Interoperability Collaboration (нявызн.). Microsoft (28 верасня 2007). — «“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.»  Праверана March 8, 2008.
  50. https://github.com/dotnet/roslyn
  51. Compatibility - Mono (нявызн.). Mono-project.com (12 снежня 2014). Праверана September 6, 2015.

Літаратура

Спасылкі

Тэмы гэтай старонкі (8):
Катэгорыя·Мовы праграмавання паводле алфавіта
Катэгорыя·Старонкі з няправільным сінтаксісам спасылак на крыніцы
Катэгорыя·З’явіліся ў 2000 годзе
Катэгорыя·Мовы вэб-праграмавання
Катэгорыя·Мовы праграмавання
Катэгорыя·Мовы праграмавання платформы .NET
Катэгорыя·Мовы праграмавання сямейства C
Катэгорыя·Сямейства моў праграмавання C Sharp