C Sharp

Из Википедије, слободне енциклопедије
(преусмерено са C Sharp (programming language))
Иди на навигацију Иди на претрагу

C#[1] (енгл. C sharp, изговор: /sē shärp/), повишено це или цис, један је од млађих програмских језика. Настао је 2000. године као саставни део Мајкрософтовог развојног окружења .NET Framework 1.0. На челу тима који се бавио развојем C#-а био је Андерс Хејлсберг. C# подржава више парадигми (објектно оријентисану, императивну, декларативну, генеричку) као и већина модерних виших програмских језика (C++, Java итд). Језик је опште примене и намењен је изради апликација за .NET Framework платформу.

C#
C#

Историјат[уреди]

Јануара 1999. године, Андерс Хејлсберг основао је тим за израду новог програмског језика који се у почетку звао Кул (eng. "C-like Object Oriented Language"), идејно замишљен као програмски језик C, али објектно оријентисан.[2] Мајкрософт је хтео да сачува првобитно име, али је због заштитног знака одустао.

У јулу 2000. године окружење .NET представљено је на Конференцији професионалних програмера (eng. Professional Developers Conference), језик је преименован у C#, а библиотеке и ASP.NET пренесене у C#. C# представља наследника C и C++ језика, добио је име шарп, инспирисано музичком нотацијом и значи да се написана нота изводи за пола корака више. Фајлови писани у овом језику имају екстензију .cs.

Хејлсберг је главни дизајнер C#-а у Мајкрософту, а раније је радио и на дизајну Турбо Паскала, Делфија и Visual J++. У многим интервјуима и техничким документима он је навео[тражи се извор] да су управо недостаци других програмских језика (нпр. C++, Java, Delphi и Smalltalk) довели до стварања C#.

Џејмс Гослинг, који је 1994. креирао програмски језик Java, и Били Џој, суоснивач Сан-Мајкросистемса (енгл. Sun Mycrosistems) назвали су C# имитацијом Јаве. Тачније, Џејмс Гослинг је изјавио како је C# као Јава којој су искључене сигурност, продуктивност и безбедност. [3][4] Клаус Крефт и Ангелика Лангер (аутори књига о C++-y) навели су у свом блогу да су "Јава и C# готово идентични програмски језици. Досадно понављање без иновација."[5] "Тешко да ће неко тврдити да су Јава и C# језици који су променили начин на који пишемо програме", као и да је "C# много тога позајмио од Јаве и обрнуто. Сада када C# подржава боксинг и анбоксинг, имамо особине веома сличне Јави." [6] У јулу 2000. Хејлсберг је рекао да C# није "Јавин клон" и да је по дизајну ближи C++. [7]


Од издања C# 2.0 у новембру 2005 , језици C# и Јава почињу да се развијају у различитим правцима, а сличности је све мање. Једна од битних разлика јесте додавање генерика у оба језика са веома различитом имплементацијом. C# користи генеричке објекте прве класе (енгл. first-class) који се могу користити као и свака друга класа. [8] Осим тога, C# је додао неколико главних карактеристика по којима би се у великој мери одвајао од других програмских језика и приближио функционалном стилу. Значајне карактеристике су: подржавање ламбда израза, методе проширења и анонимни типови. Ове карактеристике омогућавају C# програмерима да користе технике функционалног програмирања и примењују их кад год је то могуће. Линк (енгл. LINQ) екстензије и функционални увоз (eng. functional import) омогућују програмеру да пише мање кода који се често понавља и користи (нпр. код база података, раздвајање XML) фајла, претраживање података итд. стављајући акценат на програмерску логику како би се побољшала читљивост и одрживост.[9]
C# је имао и своју маскоту која се звала Енди(енгл. Andy) (по Андерсу Хејлсбергу). Пензионисана је у јануару 2004. године.

Верзије[уреди]

Верзија C# 1.0[уреди]

Најављена је 2000. године, а премијерно је приказана 2002. године од стране компаније Мајкрософт. Био је први програмски језик прилагођен за .NET Framework окружење.

Верзија C# 2.0[уреди]

У јулу 2003. Мајкрософт је представио спецификацију за C# 2.0 за почетак 2004. године. Ова верзија садржи неке нове могућности програмског језика, од којих је назначајније да су генерици сада параметризовани типови, много више као што су то били C++ шаблони. Они се имплементирају генерисањем по типу независног бајткода у времену превођења (компајлирања), а када се у времену извршења (енгл. run-time) шаблон први пут инстанцира за конкретан тип, тада се генерише бајткод зависан од типа. Та могућност даје високо-перформансне и много више типизиране генерике који не захтевају много изворног кода.

Верзија C# 3.0[уреди]

Визуелни Студио је 2008. добио C# верзију 3.0 која је поседовала много нових функција. То је олакшало програмерима у прављењу својих апликација. Иновације у верзији 3.0:

Верзија C# 4.0[уреди]

Први пут представљена у априлу 2010. године. Иновације у верзији 4.0:

  • Касно спајање
  • Опцони параметри

Верзија C# 5.0[уреди]

Представљена у августу 2012. године. Главне новине су:

  • Асинхрони чланови
  • Атрибути инфо позиваоца

Верзија C# 6.0[уреди]

Представљена у јулу 2015. године. Иновације у верзији 6.0:

  • Статички увоз
  • Филтери изузетака
  • Име оператора

Верзија C# 7.0[уреди]

Представљена у марту 2017. године. Новине:

  • Излазне варијабле
  • Торке и деконструкција
  • Подударање узорака
  • Локалне функције
Верзија C# 7.1[уреди]

Представљена у августу 2017. године.

Примери изворног кода[уреди]

Примери се извршавају на конзоли.

Пример 1[уреди]

На конзоли се исписује текст ”Здраво свете!”.

using System;

namespace HelloNameSpace
{
  public class HelloWorld
  {
   static void Main()
   {
     Console.WriteLine("Здраво свете!");
   }
  }
}

Пример 2[уреди]

На конзоли се исписује текст ”Унесите своје име:” и очекује се унос текста, који се смешта у променљиву име. Након тога на конзоли се исписује текст ”Здраво ” и текст који је унео корисник преко конзоле.

using System;

namespace HelloNameSpace
{
  public class HelloWorld
  {
   static void Main()
   {
      Console.WriteLine("Унесите своје име:");
      String име = Console.ReadLine();
      Console.WriteLine("Здраво " + име);
   }
  }
}

Писање програма[уреди]

Типови података[уреди]

Сваки програмски језик има елементе који га карактеришу и то су :

  • азбука
  • резервисане речи
  • константе
  • променљиве

Азбуку програмског језика C# чине мала и велика слова, цифре, специјални знаци (нпр. за аритметичке операције, релације, итд.) и разделници (тачка, двотачка, тачка зарез, итд.).

Програмски језик C# спада у групу типизираних језика. Свака променљива мора да се декларише пре употребе. Декларацијом променљиве дефинише се : назив, тип, опционо њена почетна вредност и видљивост тј. права приступа (ако је променљива чланица неке класе). У оквиру једне линије кода може се декларисати једна или пак, више променљивих. Свака променљива као карактеристику има:

  • име
  • тип

Име променљиве је низ алфанумеричких карактера при чему први знак не може бити цифра. Специјални знаци не могу бити део имена осим знака _ (доња црта) који може бити и први знак. Могу се користити мала и велика слова при чему се прави разлика између малих и великих слова.

Тип одређује: скуп вредности, начин представљања у меморији рачунара и скуп оператора који се могу примењивати.

Пример Један од целобројних типова је тип бајт (eng. byte). Скуп вредности који може имати један податак типа бајт је скуп целих бројева у опсегу од -128 до 127. За меморисање једног податка типа бајт потребно је 8 бита. За меморисање једног податка типа инт (eng. int) потребно је 4 бајта, односно 32 бита. Операције које су дозвољене над подацима типа инт су аритметичке операције (сабирање, одузимање, множење и дељење).

Типови података се могу поделити на две велике групе:

  • Вредносни типови:
    • Структуре
      • Нумерички типови података представљају целе бројеве.
        • Интегралне(целе)
          • sbyte
          • byte
          • char
          • short
          • ushort
          • int
          • uint
          • long
          • ulong
        • Типови са покретним зарезом представљају реалне бројеве.
          • float
          • double
        • Децималне
          • decimal
      • Логички типови имају само две вредности:логичка истина тј.тачно и логичка неистина тј.нетачно.
        • bool
      • Кориснички дефинисани типови
    • Енумератори
  • Референтни типови:
    • class
    • interface
    • delegate
    • object
    • string[10]

Оператори[уреди]

Типом података је између осталог одређен и скуп оператора који могу да се користе над подацима датог типа. Оператори се могу класификовати по више критеријума. Најчешће се користи класификација на основу броја операнада и класификација у односу на врсту израза у којима се користе. По првој класификацији оператори могу бити :

Унарни оператори су оператори који имају само један операнд. Такав је на пример оператор негације.

Бинарни оператори се примењују над два операнда и они су најчешћи. Пример бинарних оператора су оператори за сабирање, одузимање, множење итд.

Тернарни оператор има три операнда и у програмском језику C# постоји само један такав оператор (тај оператор је оператор „?:” који ће накнадно бити описан).

По другој класификацији оператори се могу поделити на:

  • аритметичке(нумеричке),
  • логичке,
  • релацијске,
  • операторе за рад са текстуалним подацима.

Синтаксно исправна комбинација операнада и оператора представља један израз. Израз, тачније речено вредност израза, такође има свој тип који може да буде један од стандардних типова (целобројни, реални, логички,...).

Пример израза: alfa - 3 * pom + beta Ако се у једном изразу појави више оператора поставља се питање којим редоследом ће они бити примењивани, односно извршавани. Сваки оператор има свој приоритет. Редослед примене оператора зависи од приоритета оператора који се срећу у једном изразу. Ако имамо више оператора истог приоритета онда се у неким случајевима они примењују с лева у десно тј. онако како се појављују у изразу. Поред познавања начина функционисања оператора треба знати и приоритет оператора и редослед извршавања ако се јави више њих узастопно.

Ако експлицитно желимо одговарајући редослед извршавања оператора онда користимо заграде. У општем случају се најпре примењују они оператори који се налазе у заградама. Ако имамо случај угњеждених заграда онда се најпре примењују најдубље заграде.

Аритметички оператори[уреди]

Аритметички оператори су :

  • +(сабирање)
  • -(одузимање)
  • *(множење)
  • /(дељење)
  •  %(остатак целобројног дељења — модуо)

Логички опаратори[уреди]

Логички оператори су:

  •  ! -негација
  • ||-логичко "или"
  • &&-логичко "и"

= Релацијски оператори[уреди]

Релацијски оператори су:

  • == — еквиваленција, одсносно једнакост
  •  != — нееквиваленција, односно различито
  • < — мање
  • > — веће
  • <= — мање или једнако
  • >= — веће или једнако

Бит оператори[уреди]

Оператори за рад са битовима су:

  • ~ — негација на нивоу бита
  • & — И на нивоу бита
  • | — Или на нивоу бита
  • ^ — ексклузивно или на нивоу бита
  • << — померање у лево
  • >> — померање у десно

Текстуални оператори[уреди]

Текстуални оператор је конкатенација у ознаци + и представља надовезивање другог операнда на први операнд. Поред претходно наведених оператора који се најчешће користе, постоје и други оператори као што су оператори доделе, оператори за инкрементирање ,оператори за декрементирање ,тернарни оператор итд.

Основни оператор доделе је =. У општем случају оператор доделе се користи на следећи начин:

променљива=израз

Најпре се израчунава израз, а затим се израчуната вредност израза додељује променљивој при чему типови израза и променљиве морају да се сложе.

Поред основног оператора доделе постоје и сложени облици оператора доделе који имају општи облик

оператор= где је оператор било који аритметички оператор. Пример: a += b; је исто што и a = a + b;

Оператори инкрементирања и декрементирања[уреди]

Оператори инкрементирања у ознаци ++ и декрементирања у ознаци -- могу бити префиксни и постфиксни. Оператор инкрементирања повећава вредност операнда за један, а оператор декрементирања смањује вредност операнда за један и то без обзира да ли су префиксни или постфиксни. Разлика се уочава једино када су ови оператори део неког сложенијег израза. У том случају се оператори инкрементирања и декрементирања, ако су у префиксном облику извршавају пре рачунања вредности израза, за разлику од случаја када се јављају у постфиксном облику када се извршавају тек након израчунатог израза. Једноставно речено, ако се у неком изразу оператори инкрементирања и декрементирања јављају у префиксном облику вредност израза се израчунава са новим вредностима операнада над којим се примењују ови оператори, односно у случају постфиксних оператора израз се рачуна са старим вредностима операнада.

Приоритет оператора[уреди]

Сви оператори имају свој приоритет. Компајлер извршава неки израз у коме постоји више оператора у редоследу који се одређује на основу приоритета оператора и места њиховог појављивања у изразу. Неки оператори имају исти приоритет, односно сви оператори се могу сврстати у категорије. Приоритет ових категорија (од највишег ка најнижем) је следећи :

  • основни оператори(приступ пољу, позив методе, приступ индексу, постинкрементирање, постдекрементирање,"new","typeof","sizeof")
  • унарни оператори
  • аритметички(множење, дељење, остатак при дељењу)
  • сабирање и одузимање
  • померање на нивоу бита(померање у лево и померање у десно)
  • релациони оператори
  • једнакост(једнако или различито)
  • И на нивоу бита
  • ексклузивно ИЛИ на нивоу бита
  • ИЛИ на нивоу бита
  • логичко И
  • логичко ИЛИ
  • тернарни оператор
  • оператор додељивања

Разлика између C# и C++[уреди]

Код у језику C# је мало разумљивији од кода C++. Језик C# је сигурнији по питању доделе типа променљивим. То значи да уколико некој променљивој или неком податку доделимо одређени тип, он не може бити замењен другим типом. Постоје строга правила којих се морамо придржавати приликом конверзија типова, што у суштини значи да ћемо морати да напишемо више кода у C# него у C++-у да бисмо извршили исте задатке. Код је робуснији и једноставније је отклонити грешке, односно .NET у сваком тренутку може одредити ком типу припада тражени податак.

Због тога у C# језику, наредбе као што су „узми део меморије почевши од 4. бајта унутар податка и дужине 10 бајтова и интерпретирај га као X”, што не мора увек да буде лоша особина.

За разлику од C++, C# не подржава вишеструко наслеђивање, иако класа може имплементирати више интерфејса.[11]

Особине језика[уреди]

Битно је напоменути да C# програмски језик синтаксно није сложен (има око 80 резервисаних речи), али је врло изражајан у делу где је потребно решити било какав проблем софтверског девелопмент процеса. Поред могућности које се тичу саме имплементације програмских језика, битно је напоменути да C# подржава и следеће:

  • Директан приступ меморији помоћу показивача у стилу C++-а
  • Резервисане речи за издвајање несигурних операција
  • Упозораваче скупљача смећа окружења ЦЛР(CLR) да не уништава објекте на које показују показивачи док се ти објекти не ослободе, итд.

Портабилност[уреди]

C# по дизајну најбоље осликава ЦЛИ (енг. Common Language Infrastructure).Спецификације језика не захтевају генерисање ЦИЛ(енг. Common Intermediate Language) или било ког другог специфичног формата, већ се може компајлирати као и традиционални програмски језици C++,Фортран и други.

Методе[уреди]

Као C++,за разлику од Јаве,C# програмери морају да користе кључну реч virtual како би из подкласе променили наслеђени метод.

Методе проширења дозвољавају програмерима да користе статичке методе омогућавајући програмерима да додају методе објекту.

Не постоје глобалне променљиве нити методе. Све променљиве и функције морају бити декларисане унутар класа.

Приступ меморији[уреди]

Показивачи се могу користити само у блоковима означеним са unsafe и потребна је посебна дозвола за покретање. Већини објеката се приступа путем сигурних референци који увек показују на постојеће објекте или имају јасно дефинисану нулту вредност(енг. null), немогуће је добити референцу на непостојећи објекат или на случајни блок меморије. Меморија се не ослобађа експлицитно већ то ради скупљач отпадака(енг.Garbage Collector).

Изузеци[уреди]

Изузеци у C# не постоје, за разлику од Јаве. Ово је била свесна одлука заснована на проблемима скалабилности и веродостојности.

Полиморфизам[уреди]

Објектно оријентисана парадигма уводи појам наслеђивања, тј. извођења која представља могућност да се једна класа дефинише на основу неке друге класе при чему ће та нова класа да има све особине које има и постојећа класа, неке особине ће бити промењене а неке нове ће бити додате. То конкретно значи да не морамо да преписујемо постојећу класу (познати "копи-пејст"(eng. copy-paste) приступ који се често користи у процедуралном програмирању и представља извор многих грешака) већ само да наведемо од које класе полазимо, односно која је основна или родитељска класа и да модификујемо или додамо неке чланице класе.

Не постоји вишеструко наслеђивање, односно свака класа може бити потомак само једне класе.

Ову одлуку донео је главни дизајнер језика како би се избегле компликације и поједноставили архитектонски захтеви током ЦЛИ-ја (енг. Common Language Infrastructure).


За разлику од Јаве, C# подржава преоптерећење оператера.

Boxing i unboxing[уреди]

Boxing је операција имплицитног конвертовања променљиве у одговарајући објекат.

Unboxing је операција експлицитног конвертовања објекта у вредносни тип.

Енкапсулација[уреди]

Енкапсулација, енкапсулирање што у преводу значи замотавање је начин да ви сакријете, заштитите и контролишете приступ подацима који се налазе у објекту. То радите тако што члановима класе одредите ранг видљивости, тј. одредите који су чланови класе, на пример, јавни, приватни, заштићени или интерни.

Због енкапсулације постоје методе get и set преко којих приступамо атрибутима класа.

Остало[уреди]

  • Постоје разне конверзије (имплицитне и експлицитне) између различитих типова података (32-битни у 64-битне бројеве, int у float или string...).
  • Језик је Case sensitive, разликује мала и велика слова.

Какве апликације можемо писати у C#-у?[уреди]

Језик C# нема ограничења у погледу тога какве све апликације можемо направити. C# користи окружење и самим тим нема ограничења у вези са могућим апликацијама. Најчешћи типови прављених апликација:

  • Виндовс апликације - То су рецимо, апликације типа Мајкрософт Офис (eng. Microsoft Office) које имају изглед Виндовса и одлично с слажу са њим. Ово је упрошћено коришћењем модула Виндовс формулара унутар .НЕТ окружења, који у ствари чини библиотека контрола (као што су дугмад, палете алатки, менија итд.) које нам користи при изради Виндовс корисничког интерфејса.
  • Веб апликације- Веб стране које можемо видети кроз било који читач. .НЕТ окружење пружа веома моћан систем генерисања Веб садржаја и то динамички, дозвољавајући персонализацију, сигурност и још много тога.
  • Веб сервиси - представљају нов и узбудљив начин израде разноврсних дистрибуираних апликација. Користећи Веб сервисе преко Интернета можемо размењивати било коју врсту података, користећи просту синтаксу, не водећи рачуна о томе у ком јеѕику је написана апликација нити на ком систему је постављена.[12]

Кључне речи[уреди]

Кључне речи C# (верзија 2.0) су: abstract, as, base, bool, break, byte, case, catch, char, checked, class, const, continue, decimal, default, delegate, do, double, else, enum, event, explicit, extern, false, finally, fixed, float, for, foreach, goto, if, implicit, in, int, interface, internal, is, lock, long, namespace, new, null, object, operator, out, override, params, private, protected, public, readonly, ref, return, sbyte, sealed, short, sizeof, stackalloc, static, string, struct, switch, this, throw, true, try, typeof, uint, ulong, unchecked, unsafe, ushort, using, virtual, volatile, void и while.[13]

Класе[уреди]

Као објективно оријентисан програмски језик, захтева се постојање макар једног објекта, односно класе, која садржио код програма. Класу дефинише резервисана реч class, иза које следи идентификатор, односно име класе. Унутар класе се дефинишу променљиве и функције који представљају њене чланове.

  class имеКласе
  {
    //следе променљиве и методе који су чланови класе
  }
}

Већина библиотечких класа се налази у именском простору System. Да би се могло приступити објекту у том именском простору потребно је написати комплетно име објекта. Тако на пример, да би се приступило класи Console у именскокм простору System, потребно је користити име System.Conslole. Пример позивања функције WriteLine() у класи Console:

  class clsMain 
  {
    static public void Main()
    {

       System.Console.WriteLine("Здраво свете");
    }
  }
}

Ова синтакса се може скратити употребом резервисане речи using, којом се преводиоцу указује на приступ одређеном именском простору у коме треба да пронађе одређени индентификатор. Пример:

  using System;
  class clsMain 
  {
    static public void Main()
    {

       System.Console.WriteLine("Здраво свете");
    }
  }
}

Резервисана реч using мора стајати ван класе, у супротном ће преводилац пријавити грешку. Након наведеног именског простора,

Функције[уреди]

У целом програму, најмање једна класа садржи функцију Main() и она представља полазну тачку програма. Оперативни систем покреће програм, тако што покреће управо ову функцију. Програм редом извршава исказе функције Main(), а по извршавању последњег, програм врача контролу оперативном систему.

Приликом дефинисања функције, неопходно је дефинисати њен повратни тип. Функције обично враћају одређени тип, а ако функција не треба да врати никакву вредност, онда је њен повратни тип void. Повратни тип функције Main() мора бити или void или int. Ако се одреди да функција Main() буде типа int, она мора да се заврши исказом return, којом се враћа нека целобројна вредност оперативном систему. Након дефинисања повратног типа функције, налази се име функције, које мора почињати неким великим или малим словом или доњом цртом. Име функције не може садржати операторе. Дефиниција функције може садржати листу параметара, који се пишу унутар заграда. Листа садржи типове података и имена параметара, међусобно раздвојене зарезима. Након затворене заграде писшу се искази које функција извршава. Сваки програм мора садржати најмање једну класу и једну функцију. Функција Main() такође може садржати листу параметара, где се обично користи само један параметар у облику низа типа string:

   static int void Main(string [ ] аргументи)
   {
     //искази

     return (0);
   }

Именски простор[уреди]

Како би се избегло понављање имена, програмски склопови језика C# штите класу помоћу скупа именских простора.(namespace). Именски простор дефинише логички простор за идентификаторе. Идентификатори, односно имена класа морају бити јединствени у оквиру једног именског простора, али је дозвољно да се поклапају са именима класа у другим именским просторима.

Писање коментара[уреди]

Једнолинијски коментари се пишу иза две косе црте //. Сав текст који долази иза њих до краја линије сматра се коментаром. Вишелинијски коментари се пишу између косих цртеа и звездице, односно између /* и */.

Пример[уреди]

using System;

namespace РадниПростор
{
  public class Програм
  {
   static void Main()
   {
      //једнолинијски коментар
      /* Вишелинијски 
         коментар */
      Console.ReadLine(); 
   }
  }
}

Писање конзолних програма[уреди]

Конзолни програми су најједноставнији облик C# програма. Изворни програм је могуће написати у обичном програму за обраду текста, као на пример у Ноутпеду. C# преводиоц не узима у обзир екстензију датотеке, али се за датотеке у изворном коду у C# препоручује наставак cs.

Функција Console.Write() је најсличнија функцији printf() из језика C++. Исписује излазну секвенцу. Излазне секвенце могу бити:

Излазна секвенца Значење
\a звоно, роизводи кратак звучни сигнал
\b помера за једно место улево
\f помера излаз на почетак следеће стране на штампачу, а на енкрану исписује контролни знак
\n помера курсор на почетак следећег реда
\r текст који се исписује на екрану после овог знака, појављује се преко текућег садржаја реда
\t знак за табулатор
\v вертикални табулатор. На екрану даје контролни знак
\" наводници. користи се као граничник за знаковне низове. у комбинацији са косом цртом преводилац га тумачи као обичан знак
\\ исписује обрнуту косу црту

Референце[уреди]

  1. ^ Чита се си шарп.
  2. ^ Hamilton, Naomi (1. 10. 2008). „The A-Z of Programming Languages: C#”. Computerworld. Приступљено 1. 10. 2017. 
  3. ^ Wylie Wong (2002). „Why Microsoft's C# isn't”. CNET: CBS Interactive. Приступљено 19. 10. 2017. 
  4. ^ Joy, Bill (7. 2. 2002). „Microsoft's blind spot”. cnet.com. Приступљено 12. 01. 2010. 
  5. ^ Klaus Kreft and Angelika Langer (2003). „After Java and C# - what is next?”. Приступљено 29. 6. 2017. 
  6. ^ Klaus Kreft and Angelika Langer (3. 7. 2003). „After Java and C# - what is next?”. artima.com. Приступљено 12. 10. 2017. 
  7. ^ Osborn, John (1. 8. 2000). „Deep Inside C#: An Interview with Microsoft Chief Architect Anders Hejlsberg”. O'Reilly Media. Приступљено 29. 11. 2017 
  8. ^ „Generics (C# Programming Guide)”. Microsoft. Приступљено 21. 03. 2011. 
  9. ^ Mercer, Ian (15. 4. 2010). „Why functional programming and LINQ is often better than procedural code”. abodit.com. Приступљено 27. 10. 2017. 
  10. ^ Типови података језика C# — са сајта Мајкрософта
  11. ^ Karli Watson (2002). „Od pocetka..C#” (PDF). CET Computer Equipment and Trade. Приступљено 28. 11. 2017. 
  12. ^ Karli Watson (2002). „Od pocetka..C#” (PDF). CET Computer Equipment and Trade. Приступљено 28. 11. 2017. 
  13. ^ Кључне речи језика C# — са сајта Мајкрософта

Види још[уреди]

Спољашње везе[уреди]