53

Въведение в C#

  • Upload
    adriel

  • View
    77

  • Download
    7

Embed Size (px)

DESCRIPTION

Програмиране за .NET Framework. http:// www.nakov.com / dotnet /. Въведение в C#. Светлин Наков. Национална академия по разработка на софтуер. academy.devbg.org. Необходими знания. Добро познаване на поне един език за програмиране от високо ниво C C++ C# Java Pascal/Delphi Perl - PowerPoint PPT Presentation

Citation preview

Page 1: Въведение в  C#
Page 2: Въведение в  C#

Въведение в Въведение в C#C#

Програмиране заПрограмиране за .NET Framework .NET Frameworkhttp://http://www.nakov.comwww.nakov.com//dotnetdotnet//

Светлин НаковСветлин НаковНационална академия по Национална академия по разработка на софтуерразработка на софтуерacademy.devbg.orgacademy.devbg.org

Page 3: Въведение в  C#

Необходими знанияНеобходими знания Добро познаване на поне един език Добро познаване на поне един език

за програмиране от високо нивоза програмиране от високо ниво CC C++C++ C#C# JavaJava Pascal/DelphiPascal/Delphi PerlPerl PythonPython

Базови познания за архитектурата Базови познания за архитектурата на на .NET Framework.NET Framework

Page 4: Въведение в  C#

СъдържаниеСъдържание (1) (1) Какво е Какво е C#C# Принципи при дизайна на езикаПринципи при дизайна на езика Нашата първа програма на Нашата първа програма на C#C# Типове данни в Типове данни в C#C# Примитивни типове данниПримитивни типове данни Изброен типИзброен тип ДекларацииДекларации Изрази (Изрази (expressions)expressions) Програмни конструкции (Програмни конструкции (statements)statements)

Page 5: Въведение в  C#

СъдържаниеСъдържание (2) (2) Елементарни програмни конструкцииЕлементарни програмни конструкции Съставни конструкцииСъставни конструкции Конструкции за управление – Конструкции за управление –

условни конструкции, конструкции за условни конструкции, конструкции за цикъл, конструкции за преходцикъл, конструкции за преход

Специални конструкцииСпециални конструкции Коментари и Коментари и XMLXML документация документация Вход и изход от конзолатаВход и изход от конзолата УпражненияУпражнения

Page 6: Въведение в  C#

Какво е Какво е C#C# Съвременен обектно-ориентиран език за Съвременен обектно-ориентиран език за

програмиране с общо предназначениепрограмиране с общо предназначение Заимства много отЗаимства много от C++, Java C++, Java ии Delphi Delphi Наследява:Наследява:

базовия синтаксис на базовия синтаксис на C/C++C/C++ и и JavaJava леснотата за използване на леснотата за използване на JavaJava мощността на мощността на C++C++ (предефинирани оператори) (предефинирани оператори) силните страни на силните страни на DelphiDelphi (свойства, (свойства,

индексатори, компонентна ориентираност)индексатори, компонентна ориентираност) Въвежда някои нови концепции:Въвежда някои нови концепции:

типове по стойност и типове по референциятипове по стойност и типове по референция делегати и събитияделегати и събития атрибутиатрибути XML XML документациядокументация

Page 7: Въведение в  C#

Принципи при дизайна на Принципи при дизайна на C#C# Създаден от екипа на Създаден от екипа на Anders Hejlsberg, Anders Hejlsberg,

архитектът на архитектът на DelphiDelphi Насочен към компонентно-ориентиранНасочен към компонентно-ориентиранo o

програмиранепрограмиране Компоненти, свойства, събитияКомпоненти, свойства, събития XMLXML-базирана документация-базирана документация

Всичко е събрано на едно мястоВсичко е събрано на едно място – – без без headerheader файлове, без файлове, без IDLIDL и други файлове и други файлове

Всички данни са обекти, дори Всички данни са обекти, дори примитивните типовепримитивните типове 5.5.ToStringToString()() е валидно извикване е валидно извикване Примитивните типове автоматично се Примитивните типове автоматично се

опаковат и разопаковатопаковат и разопаковат

Page 8: Въведение в  C#

Сигурност и надеждност на кодаСигурност и надеждност на кода Силна типизираност и типова безопасностСилна типизираност и типова безопасност

Няма неправилна работа с указателите и с паметтаНяма неправилна работа с указателите и с паметта Няма излизане от границите на масивитеНяма излизане от границите на масивите Няма неинициализирани променливиНяма неинициализирани променливи

Безопасност на аритметичните операцииБезопасност на аритметичните операции Експлицитно задаване на виртуални методи и Експлицитно задаване на виртуални методи и

припокриване на методприпокриване на метод Автоматично управление на паметтаАвтоматично управление на паметта и и

ресурситересурсите Широко използване на изключенияШироко използване на изключения Вградени механизми за сигурност на кода Вградени механизми за сигурност на кода

((code access security code access security и и role-based security)role-based security) Стандартизиран от Стандартизиран от ECMA ECMA ии ISO ISO

Принципи при дизайна на Принципи при дизайна на C#C#

Page 9: Въведение в  C#

Програмите на Програмите на C#C# Представляват съвкупност от дефиниции Представляват съвкупност от дефиниции

на класове, структури и други типовена класове, структури и други типове Някой от класовете съдържа метод Някой от класовете съдържа метод Main()Main()

– – входна точка за програматавходна точка за програмата Приложенията могат да се състоят от Приложенията могат да се състоят от

много файловемного файлове В един файл може да има няколко В един файл може да има няколко

класове, структури и други типовекласове, структури и други типове Класовете логически се разполагат в Класовете логически се разполагат в

пространства от имена пространства от имена (namespaces)(namespaces) Един Един namespace namespace може да е разположен в може да е разположен в

няколко файланяколко файла

Page 10: Въведение в  C#

Нашата първа програма на Нашата първа програма на C#C#

Много прилича на Много прилича на JavaJava Много прилича на Много прилича на C++C++ Не е нито едното от дветеНе е нито едното от двете

using System;using System;

class HelloCSharpclass HelloCSharp{{ static void static void MMain()ain() {{ Console.WriteLine(Console.WriteLine(""Hello, C#Hello, C#"");); }}}}

HelloCSharp.csHelloCSharp.cs

Page 11: Въведение в  C#

Как работи програматаКак работи програмата?? Директивата Директивата using System;using System;

като като #include#include в в C++C++ като като importimport в в JavaJava като като usesuses в в DelphiDelphi

Декларацията на класДекларацията на клас ключова дума ключова дума classclass

Методът Методът static void static void MMain()ain() входна точка на програматавходна точка на програмата когато завърши, завършва и програматакогато завърши, завършва и програмата

Класът Класът System.ConsoleSystem.Console осигурява средства за вход и изход от осигурява средства за вход и изход от

конзолатаконзолата

Page 12: Въведение в  C#

ДемонстрацияДемонстрация #1 #1 Компилиране от командния редКомпилиране от командния ред

Стартиране от командния редСтартиране от командния ред

РезултатРезултат

csc HelloCSharp.cscsc HelloCSharp.cs

HelloCSharp.HelloCSharp.exeexe

HelloHello, , CC##

Page 13: Въведение в  C#

ДемонстрацияДемонстрация #2 #2 Създаване на проект, компилиране и Създаване на проект, компилиране и

стартиране от стартиране от Visual Studio.NETVisual Studio.NET

[Ctrl+F5]

Page 14: Въведение в  C#

Запазени думи в Запазени думи в C#C#abstractabstract asas basebase boolbool breakbreak bytebyte

casecase catchcatch charchar checkedchecked classclass constconst

continuecontinue decimaldecimal defaultdefault delegatedelegate dodo doubledouble

elseelse enumenum eventevent explicitexplicit externextern falsefalse

finallyfinally fixedfixed floatfloat forfor foreachforeach gotogoto

ifif impliciimplicitt

inin intint interfacinterfacee

internainternall

isis locklock longlong namespacenamespace newnew nullnull

objectobject operatooperatorr

outout overrideoverride paramsparams privateprivate

protecteprotectedd

publicpublic readonlreadonlyy

refref returnreturn sbytesbyte

sealedsealed shortshort sizeofsizeof stackallostackallocc

staticstatic stringstring

structstruct switchswitch thisthis throwthrow truetrue trytry

typeoftypeof uintuint ulongulong uncheckedunchecked unsafeunsafe ushortushort

usingusing virtualvirtual voidvoid volatilevolatile whilewhile

Page 15: Въведение в  C#

Типове данни в Типове данни в C#C# Типовете данни биват два видаТиповете данни биват два вида

Типове по стойност Типове по стойност (value types)(value types) директно съдържат своята стойностдиректно съдържат своята стойност съхраняват се в стекасъхраняват се в стека предават се по стойностпредават се по стойност

Типове по референция Типове по референция (reference types)(reference types) представляват силно-типизирани указатели представляват силно-типизирани указатели

към стойност в динамичната паметкъм стойност в динамичната памет предават се по референция (указател)предават се по референция (указател) унищожават се от унищожават се от garbage collectorgarbage collector-а-а

Типовете биватТиповете биват o oщеще примитивни (вградени, примитивни (вградени, built-in)built-in) типове типове дефинирани от потребителядефинирани от потребителя

Page 16: Въведение в  C#

Типове данни в Типове данни в C#C# Типове по стойност Типове по стойност (value types)(value types)

ПримитивниПримитивни int i;int i; ИзброениИзброени enum State { Off, On }enum State { Off, On } СтруктуриСтруктури struct Point { int x, y; }struct Point { int x, y; }

Типове по референция (Типове по референция (reference types)reference types) КласовеКласове class class FooFoo: Bar, : Bar, IFooIFoo {...} {...} ИнтерфейсиИнтерфейси interface interface IFooIFoo: : IBarIBar {...} {...} МасивиМасиви string[] a = newstring[] a = new string[string[55];]; ДелегатиДелегати delegate void Empty();delegate void Empty();

На всички типове в На всички типове в C# C# съответстват типове от съответстват типове от CTS CTS на на .NET Framework.NET Framework Например Например intint = = System.Int32System.Int32

Page 17: Въведение в  C#

Примитивни типовеПримитивни типове Примитивните типове данни в Примитивните типове данни в C# C#

(built-in data types) (built-in data types) биватбиват Типове по стойностТипове по стойност

като примитивните типове в като примитивните типове в C C и и C++C++ bytebyte, , sbytesbyte, , intint, , uintuint, , longlong, , ulongulong – – цели цели

числачисла floatfloat, , doubledouble, , decimaldecimal – реални числа – реални числа charchar – – Unicode Unicode символисимволи boolbool – булев тип ( – булев тип (truetrue или или falsefalse))

Типове по референцияТипове по референция stringstring – – неизменима последователност от неизменима последователност от

Unicode Unicode символисимволи Специален тип Специален тип objectobject – всички типове – всички типове

го наследяватго наследяват

Page 18: Въведение в  C#

Преобразуване на типоветеПреобразуване на типовете Два типа преобразувания на Два типа преобразувания на

примитивните типовепримитивните типове По подразбиране (По подразбиране (implicit conversion)implicit conversion)

позволява се, когато е безопаснопозволява се, когато е безопасно Например: Например: intint longlong, , floatfloat doubledouble, ,

longlong floatfloat, , bytebyte shortshort Изрично (Изрично (explicit conversion)explicit conversion)

когато преобразуваме към по-малък типкогато преобразуваме към по-малък тип или типовете не са директно съвместимиили типовете не са директно съвместими

Например Например longlong intint, , doubledouble floatfloat, , charchar shortshort, , intint charchar, , sbytesbyte uintuint

В В checked checked режим при препълване се режим при препълване се получава получава System.OverflowExceptionSystem.OverflowException

Page 19: Въведение в  C#

Преобразуване на типоветеПреобразуване на типоветеbyte b8 = 255;byte b8 = 255;short sh16 = short sh16 = b8b8;; // implicit conversion// implicit conversionint i32 = sh16; int i32 = sh16; // implicit conversion// implicit conversionfloat f = i32; float f = i32; // implicit // implicit -- possible loss of precision possible loss of precision!!double d = f; double d = f; // implicit conversion// implicit conversion

checked {checked { byte byte8 = (byte) sh16;byte byte8 = (byte) sh16; // explicit conversion// explicit conversion // OverflowException is possible// OverflowException is possible!!

ushort ush16 = (ushort) sh16;ushort ush16 = (ushort) sh16; // explicit conversion// explicit conversion // OverflowException is possible if sh16 is negative// OverflowException is possible if sh16 is negative!!}}

unchecked {unchecked { uint ui32 = 1234567890;uint ui32 = 1234567890; sbyte sb8 = (sbyte) ui32;sbyte sb8 = (sbyte) ui32; // explicit conversion // explicit conversion // OverflowException is not thrown in unchecked mode // OverflowException is not thrown in unchecked mode }}

Page 20: Въведение в  C#

Изброени типове (Изброени типове (enumerations)enumerations) Изброените типове в Изброените типове в C#C# се състоят от се състоят от

множество именувани константимножество именувани константи Дефинират се със запазената дума Дефинират се със запазената дума

enumenum. Например:. Например:

Използват се за задаване на една Използват се за задаване на една измежду няколко възможностиизмежду няколко възможности

Вътрешно се представят с Вътрешно се представят с intint, но , но може да се зададе и друг числов типможе да се зададе и друг числов тип

Силно типизирани – не се превръщат Силно типизирани – не се превръщат в в intint освен експлицитноосвен експлицитно

enum Days {Sat, Sun, Mon, Tue, Wed, Thu,enum Days {Sat, Sun, Mon, Tue, Wed, Thu, Fri};Fri};

Page 21: Въведение в  C#

Изброени типове (Изброени типове (enumerations)enumerations) Наследяват типа Наследяват типа System.EnumSystem.Enum Могат да се използват като съвкупност от Могат да се използват като съвкупност от

битови флаговебитови флагове чрез атрибута чрез атрибута [Flags][Flags]

[Flags][Flags]public enum FileAccess public enum FileAccess {{ Read = 1,Read = 1, Write = 2,Write = 2, Execute = 4,Execute = 4, ReadWrite = Read | WriteReadWrite = Read | Write}}//...//...

Console.WriteLine(Console.WriteLine( FileAccess.ReadWrite | FileAccess.Execute);FileAccess.ReadWrite | FileAccess.Execute);// The result is: "ReadWrite, Execute"// The result is: "ReadWrite, Execute"

Page 22: Въведение в  C#

ИдентификаториИдентификатори Състоят се от последователности от Състоят се от последователности от

букви, цифри и знак за подчертаванебукви, цифри и знак за подчертаване Винаги започват с буква или подчертаванеВинаги започват с буква или подчертаване Малките и главните букви се различаватМалките и главните букви се различават Могат да съдържат Могат да съдържат Unicode Unicode символисимволи

int int алабала_портокалаалабала_портокала = 118; = 118; bool \u1027\u11af = true;bool \u1027\u11af = true;

Microsoft Microsoft препоръчва се следната препоръчва се следната конвенцияконвенция PascalCasePascalCase – – имена на класове, имена на класове, namespace-namespace-и, и,

структуриструктури, , типоветипове,, методи методи, , свойства, свойства, константиконстанти

camelCasecamelCase – – имена на променливи и параметриимена на променливи и параметри

Page 23: Въведение в  C#

ДекларацииДекларации Декларациите на променливи в Декларациите на променливи в C# C#

могат са няколко вида (почти като в могат са няколко вида (почти като в C++C++, , JavaJava и и DelphiDelphi):): локални променливи (за даден блок)локални променливи (за даден блок)

int count;int count; член-променливи на типачлен-променливи на типа

public static int public static int mCountermCounter;; могат да имат модификаторимогат да имат модификатори

константиконстанти compile-time compile-time константиконстанти – – декларират се като декларират се като

променливи със запазената дума променливи със запазената дума constconst runtime runtime константи – декларират се като константи – декларират се като

полета сполета с модификатора модификатора readonlyreadonly

Page 24: Въведение в  C#

КонстантиКонстанти В В C# C# има два вида константи:има два вида константи:

Compile-time Compile-time константиконстанти::

Декларират се със запазената дума Декларират се със запазената дума constconst Задължително се инициализират в момента Задължително се инициализират в момента

на декларирането им и не могат да се на декларирането им и не могат да се променят след товапроменят след това

Реално не съществуват като променливи в Реално не съществуват като променливи в програматапрограмата

По време на компилация се заместват със По време на компилация се заместват със стойността имстойността им

public const double PI = 3.1415926535897932;public const double PI = 3.1415926535897932;const string COMPANY_NAME = "Менте Софт";const string COMPANY_NAME = "Менте Софт";

Page 25: Въведение в  C#

КонстантиКонстанти В В C# C# има няколко вида константи:има няколко вида константи:

Run-time Run-time константиконстанти

Декларират се със запазената дума Декларират се със запазената дума readonlyreadonly

Представляват полета на типа, които са Представляват полета на типа, които са само за четенесамо за четене

Инициализират се по време на изпълнение Инициализират се по време на изпълнение (в момента на деклариране или в (в момента на деклариране или в конструктора на типа)конструктора на типа)

Не могат да се променят след като веднъж Не могат да се променят след като веднъж са инициализираниса инициализирани

public readonly DateTime NOW = DateTime.Now;public readonly DateTime NOW = DateTime.Now;

Page 26: Въведение в  C#

ОператориОператори Много близки до операторите в Много близки до операторите в C++C++ и и Java, Java,

със същите приоритетисъс същите приоритети Аритметични: Аритметични: ++, , --, , **, , //, , %%, , ++++, , ---- Логически: Логически: &&&&, , ||||, , !!, , ^̂, , truetrue, , falsefalse Побитови операции: Побитови операции: &&, , ||, , ^̂, , ~~, , <<<<, , >>>> За слепване на символни низове: За слепване на символни низове: ++ За сравнение: За сравнение: ====, , !=!=, , <<, , >>, , <=<=, , >=>= За присвояване: За присвояване: ==, , +=+=, , -=-=, , *=*=, , /=/=, , %=%=, , &=&=, , ||

==, , ^=^=, , <<=<<=, , >>=>>= За работа с типове: За работа с типове: asas, , isis, , sizeofsizeof, , typeoftypeof Други: Други: .., , [][], , ()(), , ?:?:, , newnew,, checkedchecked, ,

uncheckedunchecked,, unsafeunsafe

Page 27: Въведение в  C#

Изрази (Изрази (expressions)expressions) Изразите, които се изчисляват до някаква Изразите, които се изчисляват до някаква

стойност се наричат стойност се наричат expressionsexpressions Имат синтаксиса на Имат синтаксиса на C++ C++ и и JavaJava Например:Например:

a = b = c = 20; a = b = c = 20; // израз със стойност 20// израз със стойност 20(а+5)*((а+5)*(32-a)32-a)%%bb // израз с числова стойност// израз с числова стойност"ала""ала" + + "бала""бала" // символен израз// символен израз (string (string))Math.Cos(Math.PI/x)Math.Cos(Math.PI/x) // израз с// израз с реална стойностреална стойностtypeof(obj)typeof(obj) // // израз от тип израз от тип System.TypeSystem.Type(int) arr[idx1][idx2](int) arr[idx1][idx2] // // израз от типизраз от тип intintnew Student() new Student() // // израз от типизраз от тип Student Student(currentValue <= MAX_VALUE)(currentValue <= MAX_VALUE) // // булев изразбулев израз

Page 28: Въведение в  C#

Конструкции (Конструкции (statements)statements) Програмните конструкции (Програмните конструкции (statementsstatements) )

имат синтаксиса на имат синтаксиса на C++ C++ и и JavaJava Биват няколко вида:Биват няколко вида:

Елементарни програмни конструкцииЕлементарни програмни конструкции Съставни конструкцииСъставни конструкции – – { { …… } } Програмни конструкции за управлениеПрограмни конструкции за управление

Условни конструкцииУсловни конструкции Конструкции за повторение и цикълКонструкции за повторение и цикъл Конструкции за преходКонструкции за преход За управление на изключениятаЗа управление на изключенията

Специални конструкции (напр. Специални конструкции (напр. locklock))

Page 29: Въведение в  C#

Конструкции (Конструкции (statements)statements) Елементарни програмни конструкцииЕлементарни програмни конструкции

Най-простите елементи на програмата. Най-простите елементи на програмата. Примери:Примери:

Съставни конструкцииСъставни конструкции Състоят се от няколко други конструкции, Състоят се от няколко други конструкции,

оградени в блокоградени в блок. . Например:Например:{{ Report report = GenerateReport(period);Report report = GenerateReport(period); report.Print();report.Print();}}

sum =sum = (a+b)/2(a+b)/2; ; // // присвояване (<променлива> = <израз>)присвояване (<променлива> = <израз>)PrintReport(PrintReport(reportreport);); // извикване на метод// извикване на методstudent = new Student("student = new Student("Светлин НаковСветлин Наков"", , 3, 42688); 3, 42688); // // създаване на обектсъздаване на обект

Page 30: Въведение в  C#

Конструкции за управлениеКонструкции за управление Условни конструкции (Условни конструкции (conditional conditional

statements)statements) ifif и и if-elseif-else

if (orderItem.Ammount > ammountInStock) if (orderItem.Ammount > ammountInStock) {{ MessageBox.Show("Not in stock!", "error");MessageBox.Show("Not in stock!", "error");}}

if (if (VValid(order)) alid(order)) {{ PProcessOrder(order);rocessOrder(order);} } else else {{ MessageBox.Show("Invalid order!", "error");MessageBox.Show("Invalid order!", "error");}}

Page 31: Въведение в  C#

switch (characterCase)switch (characterCase){{ case CharacterCasing.Lower:case CharacterCasing.Lower: text = text.ToLower();text = text.ToLower(); break;break; case CharacterCasing.case CharacterCasing.UpperUpper:: text = text.ToUpper();text = text.ToUpper(); break;break; default:default: MessageBox.Show("Invalid case!MessageBox.Show("Invalid case!", "error"", "error");); break;break;}}

Условни конструкции (Условни конструкции (conditional conditional statements)statements) switchswitch ии casecase позволено е използване по позволено е използване по stringstring и и enumenum

Конструкции за управлениеКонструкции за управление

Page 32: Въведение в  C#

Конструкции за повторение (Конструкции за повторение (iteration statementsiteration statements)) forfor--цикълцикъл

whilewhile--цикълцикъл

Конструкции за управлениеКонструкции за управление

// // Отпечатваме числата от Отпечатваме числата от 11 до до 100100 и техните квадрати и техните квадратиfor (int i=for (int i=11; i<; i<==100; i++)100; i++){{ int i2 = i*i;int i2 = i*i; Console.WriteLine(i + "Console.WriteLine(i + " ** " + i" + i + " = " +" = " + i2i2););}}

// Изчисляваме result = a^b// Изчисляваме result = a^bresult = 1;result = 1;while (b > 0)while (b > 0){{ result = result * a;result = result * a; bb--;--;}}

Page 33: Въведение в  C#

Конструкции за повторение (Конструкции за повторение (iteration statementsiteration statements)) цикъл цикъл do-whiledo-while

цикъл цикъл foreachforeach – – за обработка на колекцииза обработка на колекции

Конструкции за управлениеКонструкции за управление

string[] names = GetNames();string[] names = GetNames();// Отпечатваме всички елементи на масива// Отпечатваме всички елементи на масиваforeach (string name in names) foreach (string name in names) {{ Console.WriteLine(name);Console.WriteLine(name);}}

// // Четем символи до достигане на край на редЧетем символи до достигане на край на редdodo{{ ch = ch = ReadReadNextCharacter(stream);NextCharacter(stream);}}while (ch != '\n');while (ch != '\n');

Page 34: Въведение в  C#

Конструкции за преходКонструкции за преход breakbreak, , continuecontinue – използват се в цикли – използват се в цикли gotogoto – безусловен преход – безусловен преход returnreturn – за връщане от метод – за връщане от метод

Конструкции за преходКонструкции за преход

// // Търсим позицията на даден елемент Търсим позицията на даден елемент targettarget в масивав масива a[]a[]int position = -1;int position = -1;for (int i=0; i<a.length; i++)for (int i=0; i<a.length; i++){{ if (a[i] == target)if (a[i] == target) {{ position = i; position = i; break;break; }}}}

return position;return position;

Page 35: Въведение в  C#

Конструкции за управление на Конструкции за управление на изключениятаизключенията throwthrow – предизвикване на изключение – предизвикване на изключение try-catchtry-catch – прихващане на изключение – прихващане на изключение try-finallytry-finally – сигурно изпълнение на – сигурно изпълнение на

завършваща секциязавършваща секция try-catch-finallytry-catch-finally – прихващане на – прихващане на

изключение със завършваща секцияизключение със завършваща секция Специални конструкцииСпециални конструкции

locklock – – синхронизирано изпълнениесинхронизирано изпълнение checkedchecked, , uncheckedunchecked – – контрол на контрол на

аритметичните препълванияаритметичните препълвания fixedfixed – – фиксиране на местоположението в фиксиране на местоположението в

паметта при работа с неуправляван кодпаметта при работа с неуправляван код

Други конструкцииДруги конструкции

Page 36: Въведение в  C#

Демонстрация Демонстрация ##33 Намиране на всички трицифрени числа, Намиране на всички трицифрени числа,

чиято сума от цифрите е 25чиято сума от цифрите е 25

using System;using System;

public class Digitspublic class Digits{{ static void Main()static void Main() {{ for (int d1=1; d1<=9; d1++) for (int d1=1; d1<=9; d1++) for (int d2=0; d2<=9; d2++) for (int d2=0; d2<=9; d2++) {{ int d3 = 25 - d1 - d2;int d3 = 25 - d1 - d2; if ((d3 >= 0) && (d3 <= 9))if ((d3 >= 0) && (d3 <= 9)) {{ int n = d1*100 + d2*10 + d3;int n = d1*100 + d2*10 + d3; Console.WriteLine(n);Console.WriteLine(n); }} }} }}}}

DigitsDigits.cs.cs

Page 37: Въведение в  C#

Демонстрация #4Демонстрация #4 Дебъгерът на Дебъгерът на VS.NETVS.NET

Page 38: Въведение в  C#

Демонстрация #Демонстрация #55 Инструментът Инструментът ILDASMILDASM

ILDASM Digits.exeILDASM Digits.exe

Page 39: Въведение в  C#

КоментариКоментари в програматав програмата Коментарите биват няколко видаКоментарите биват няколко вида

Коментар за част от програмен редКоментар за част от програмен ред

Блоков коментарБлоков коментарOrder orders[]; Order orders[]; //// Съдържа всички поръчки на потребителяСъдържа всички поръчки на потребителя

/* Изтриваме всички поръчки, за които някой артикул не/* Изтриваме всички поръчки, за които някой артикул неее наличен в необходимото количествоналичен в необходимото количество. Изтриване реално. Изтриване реалноне се извършва, а само се променя статусане се извършва, а само се променя статуса на на Deleted Deleted */*/foreach (Order order in customer.foreach (Order order in customer.ООrders)rders){{ if (!if (!AAllItemsInStock(order))llItemsInStock(order)) {{ order.order.SStatus = OrderStatus.Deleted;tatus = OrderStatus.Deleted; }}}}

Page 40: Въведение в  C#

XML XML документациядокументация Представлява съвкупност от Представлява съвкупност от

коментари, започващи с коментари, започващи с ////// Може да съдържа различни Може да съдържа различни XMLXML

таговетагове Като идея прилича на Като идея прилича на JavaDoc JavaDoc в в JavaJava Значително улеснява поддръжката – Значително улеснява поддръжката –

документацията е част от кода, а не документацията е част от кода, а не стои във външен файлстои във външен файл

C# C# компилаторът може да извлича компилаторът може да извлича XMLXML документацията като документацията като XMLXML файл файл за по-нататъшна обработказа по-нататъшна обработка

Page 41: Въведение в  C#

XML документация – пример XML документация – пример /// <summary>/// <summary>/// The main entry point for the application./// The main entry point for the application./// </summary>/// </summary>/// <param name="args">The command line arguments</param>/// <param name="args">The command line arguments</param>static void Main(string[] args)static void Main(string[] args){{ // ...// ...}}

/// <summary>Calculates the square of a number</summary>/// <summary>Calculates the square of a number</summary>/// <param name=/// <param name=""num">The number to calculate</param>num">The number to calculate</param>/// <returns>The calculated square</returns>/// <returns>The calculated square</returns>/// <exception cref="OverflowException">Thrown when the/// <exception cref="OverflowException">Thrown when the/// result is too big to be stored in an int</exception>/// result is too big to be stored in an int</exception>/// <seealso cref="System.Int32"/// <seealso cref="System.Int32" / />>public static int square(int num)public static int square(int num){{ // ...// ...}}

Page 42: Въведение в  C#

<summary><summary>……</summary></summary> – – кратко описание за какво се кратко описание за какво се отнася даден тип, метод, свойство и т.н. отнася даден тип, метод, свойство и т.н. Visual Studio Visual Studio показва това описание при задействане на показва това описание при задействане на IntelliSenseIntelliSense<remarks><remarks>……</remarks></remarks>  – – подробно описание на даден подробно описание на даден тип, метод, свойство и т.н. тип, метод, свойство и т.н. Visual Studio Visual Studio показва това показва това описание в областта описание в областта Object BrowserObject Browser<param <param name="name="……"">>……</param></param> –– описание на един от описание на един от параметрите на даден методпараметрите на даден метод<returns><returns>……</returns></returns>  – – описание на връщаната от описание на връщаната от даден метод стойностдаден метод стойност<<exception exception cref="cref="……">">……</exception></exception> – – описание описание на изключение, което може да възникне в даден методна изключение, което може да възникне в даден метод<seealso cref="<seealso cref="……"/>"/>  – – препратка към информация, препратка към информация, свързана с текущото описаниесвързана с текущото описание<value><value>……</value></value>  – – описание на свойство (описание на свойство (property)property)

XML XML документация – таговедокументация – тагове

Page 43: Въведение в  C#

Демонстрация #6Демонстрация #6 Извличане на Извличане на XMLXML документация от документация от C# C# кодкод

Генериране на Генериране на HTMLHTML документация от документация от Visual Studio .NETVisual Studio .NET

csc MainClass.cs /doc:MainClassComments.xmlcsc MainClass.cs /doc:MainClassComments.xml

Page 44: Въведение в  C#

Директиви на препроцесораДирективи на препроцесора За форматиране на кодаЗа форматиране на кода

#region#region, , ##endregionendregion – – ограждат блок от кода, ограждат блок от кода, който се "свива" от редактора на който се "свива" от редактора на Visual StudioVisual Studio

Директиви за условна компилацияДирективи за условна компилация #if#if, , #else#else, , ##elifelif, , ##endifendif – – задават границите задават границите

на блоковете за условна компилацияна блоковете за условна компилация и и съответните условия (знаци) за компилиране съответните условия (знаци) за компилиране

#define#define, , ##undefundef – дефинират знаци за – дефинират знаци за условна компилацияусловна компилация

За контрол над компилатораЗа контрол над компилатора #warning, #error#warning, #error – задават предупреждения и – задават предупреждения и

грешки по време на компилациягрешки по време на компилация

Page 45: Въведение в  C#

Вход и изход от конзолатаВход и изход от конзолата Използват се стандартни класове от Използват се стандартни класове от BCLBCL Вход от конзолатаВход от конзолата

Console.ReadLine()Console.ReadLine() – – чете цял символен редчете цял символен ред и връща и връща stringstring

Console.Read()Console.Read() – – чете единичен символ и чете единичен символ и връща връща charchar

Изход към конзолатаИзход към конзолата Console.Write(Console.Write(……)) – – печата на конзолата печата на конзолата

подадените като параметри данни (приема подадените като параметри данни (приема stringstring, , intint, , floatfloat, , doubledouble,, ……)) приема параметрични форматиращи низовеприема параметрични форматиращи низове

Console.WriteLine(Console.WriteLine(……)) – – работи като работи като Conlsole.Write()Conlsole.Write(), , но преминава на нов редно преминава на нов ред

Console.WriteLine("Днес е {0:dd.MM.yyyy} г.", Console.WriteLine("Днес е {0:dd.MM.yyyy} г.", DateTime.Now);DateTime.Now);

Page 46: Въведение в  C#

Вход и изход от конзолатаВход и изход от конзолата – – примерпримерint a = Int32.Parse(Console.ReadLine());int a = Int32.Parse(Console.ReadLine());int b = Int32.Parse(Console.ReadLine());int b = Int32.Parse(Console.ReadLine());Console.WriteLine("{0} + {1} = {2}", a, b, a+b);Console.WriteLine("{0} + {1} = {2}", a, b, a+b);// (въвеждаме съответно 3 и 2 като вход от конзолата)// (въвеждаме съответно 3 и 2 като вход от конзолата)// 2 + 3 = 5// 2 + 3 = 5

Console.WriteLine(Console.WriteLine( "Днес е {0:dd.MM.yyyy} г.","Днес е {0:dd.MM.yyyy} г.", DateTime.Now);DateTime.Now);// Днес е 13.05.2004 г.// Днес е 13.05.2004 г.

Console.WriteLine("Цена: {0,1Console.WriteLine("Цена: {0,122:C}", 27);:C}", 27);// Цена: // Цена: 27,00 лв 27,00 лв// // (точният формат (точният формат зависи от текущите езикови настройкизависи от текущите езикови настройки))

String name = "Наков";String name = "Наков";Console.WriteLine("Хей, {0}, часът е {1:HH:mm}!",Console.WriteLine("Хей, {0}, часът е {1:HH:mm}!", name,name, DateTime.Now);DateTime.Now);/// Хей, Наков, часът е 16:43!/ Хей, Наков, часът е 16:43!

Page 47: Въведение в  C#

Документацията на Документацията на .NET Framework.NET Framework1.1. Търсене на помощна информация за Търсене на помощна информация за

класа класа Console.WriteLine()Console.WriteLine() (натискаме (натискаме F1 F1 във във Visual Studio .NET)Visual Studio .NET)

2.2. Намиране на темата Намиране на темата "composite "composite formatting" formatting" в в MSDNMSDN

Демонстрация #Демонстрация #77

Page 48: Въведение в  C#

Въведение в Въведение в C#C#

Въпроси?Въпроси?

Page 49: Въведение в  C#

УпражненияУпражнения1.1. Съставете програма на Съставете програма на C#C#, която въвежда от , която въвежда от

конзолата име на студент и го поздравяваконзолата име на студент и го поздравява в стил в стил ""Здравей, Здравей, <<име>!име>!""..

2.2. Съставете програма на Съставете програма на C#C#, която въвежда , която въвежда коефициентите на квадратно уравнение и коефициентите на квадратно уравнение и пресмята реалните му корени.пресмята реалните му корени.

3.3. Напишете програма, която намира всички Напишете програма, която намира всички символни низове, които се състоят от точно 5 символни низове, които се състоят от точно 5 малки латински букви и са симетрични спрямо малки латински букви и са симетрични спрямо средата си.средата си.

4.4. Проследете работата на програмата от задача 3 с Проследете работата на програмата от задача 3 с debugger-debugger-а на а на Visual Studio .NET.Visual Studio .NET.

5.5. Променете програмата от задача 3, така че да Променете програмата от задача 3, така че да намира само тези низове, които съдържат четен намира само тези низове, които съдържат четен брой гласни букви. Колко са тези низове?брой гласни букви. Колко са тези низове?

Page 50: Въведение в  C#

УпражненияУпражнения6.6. Добавете Добавете XMLXML документация в програмата от документация в програмата от

задача 5 и генерирайте задача 5 и генерирайте HTMLHTML документация от документация от Visual Studio .NETVisual Studio .NET..

7.7. Напишете програма, която намира сумарната Напишете програма, която намира сумарната стойност на група фактури. Програмата трябва да стойност на група фактури. Програмата трябва да въвежда последователно от конзолата сумите на въвежда последователно от конзолата сумите на фактурите (реални числа със знак) докато стигне фактурите (реални числа със знак) докато стигне до празен ред. Сумарната стойност на фактурите до празен ред. Сумарната стойност на фактурите трябва да се отпечата в 10-символно поле, дясно трябва да се отпечата в 10-символно поле, дясно подравнена, с точност 2 знака след десетичната подравнена, с точност 2 знака след десетичната запетая (потърсете в документацията подходящ запетая (потърсете в документацията подходящ форматиращ стринг).форматиращ стринг).

8.8. Напишете програма, която прочита прост числен Напишете програма, която прочита прост числен израз, състоящ се от реални числа, свързани с израз, състоящ се от реални числа, свързани с операциите "операциите "++" и "" и "--" и изчислява стойността му." и изчислява стойността му.

Page 51: Въведение в  C#

MSDN Training, Programming C# (MOC 2124C), MSDN Training, Programming C# (MOC 2124C), Module Module 22: Overview of : Overview of C#C#

MSDN Training, Programming C# (MOC 2124C), MSDN Training, Programming C# (MOC 2124C), Module Module 33: : Using Value-Type VariablesUsing Value-Type Variables

Jessy Liberty, Programming C#, Second Edition, Jessy Liberty, Programming C#, Second Edition, O’Reilly, 2002, ISBN O’Reilly, 2002, ISBN 0-596-00309-90-596-00309-9

Svetlin Nakov, .NET Framework Overview – Svetlin Nakov, .NET Framework Overview – http://www.nakov.com/publications/Nakov-DotNET-Framehttp://www.nakov.com/publications/Nakov-DotNET-Framework-Overview-english.pptwork-Overview-english.ppt

MSDN, CMSDN, C## Keywords – Keywords – http://msdn.microsoft.com/library/en-us/csref/html/vclrfcshttp://msdn.microsoft.com/library/en-us/csref/html/vclrfcsharpkeywords_pg.aspharpkeywords_pg.asp

MSDN, C# MSDN, C# Built-in Types TableBuilt-in Types Table ––http://msdn.microsoft.com/library/en-us/csref/html/vclrfbhttp://msdn.microsoft.com/library/en-us/csref/html/vclrfbuiltintypes.aspuiltintypes.asp

Използвана литератураИзползвана литература

Page 52: Въведение в  C#

MSDN, Common Type System Overview – MSDN, Common Type System Overview – http://msdn.microsoft.com/library/en-us/cpguide/html/cpchttp://msdn.microsoft.com/library/en-us/cpguide/html/cpconcommontypesystemoverview.asponcommontypesystemoverview.asp

MSDN, Enumerations – MSDN, Enumerations – http://msdn.microsoft.com/library/en-us/cpguide/html/cpchttp://msdn.microsoft.com/library/en-us/cpguide/html/cpconEnumerations.asponEnumerations.asp

MSDN, MSDN, C# Operators – C# Operators – http://msdn.microsoft.com/library/en-us/csref/html/vclrfChttp://msdn.microsoft.com/library/en-us/csref/html/vclrfCSharpOperators.aspSharpOperators.asp

MSDN, Statements (C# Programmer's Reference) – MSDN, Statements (C# Programmer's Reference) – http://msdn.microsoft.com/library/en-us/csref/html/vclrfsthttp://msdn.microsoft.com/library/en-us/csref/html/vclrfstatements.aspatements.asp

MSDN, MSDN, XML Documentation Tutorial (C# XML Documentation Tutorial (C# Programmer's Reference) – Programmer's Reference) – httphttp://msdn.microsoft.com/library/en-us/csref/html/vcwlkxmld://msdn.microsoft.com/library/en-us/csref/html/vcwlkxmldocumentationtutorial.aspocumentationtutorial.asp

Използвана литератураИзползвана литература

Page 53: Въведение в  C#

MSDN, C# Preprocessor Directives - MSDN, C# Preprocessor Directives - http://msdn.microsoft.com/library/en-us/csref/html/vclrfPrhttp://msdn.microsoft.com/library/en-us/csref/html/vclrfPreprocessorDirectives.aspeprocessorDirectives.asp

MSDN, Composite Formatting – MSDN, Composite Formatting – http://msdn.microsoft.com/library/en-us/cpguide/html/cpchttp://msdn.microsoft.com/library/en-us/cpguide/html/cpconcompositeformatting.asponcompositeformatting.asp

MSDN, Console Class (.NET Framework) – MSDN, Console Class (.NET Framework) – http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsyshttp://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemconsoleclasstopic.asptemconsoleclasstopic.asp

Използвана литератураИзползвана литература