Кратко съдържание



страница19/73
Дата21.07.2018
Размер9.03 Mb.
#76887
1   ...   15   16   17   18   19   20   21   22   ...   73

Оператори


Операторите в С# са много близки до операторите в C++ и Java и имат същите действие и приоритет. Те биват:

  • Аритметични: +, -, *, /, %, ++, --

  • Логически: &&, ||, !, ^, true, false

  • Побитови операции: &, |, ^, ~, <<, >>

  • За слепване на символни низове: +

  • За сравнение: ==, !=, <, >, <=, >=

  • За присвояване: =, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=

  • За работа с типове: as, is, sizeof, typeof

  • Други: ., [], (), ?:, new, checked, unchecked, unsafe

В C# операторите могат да се предефинират. В темата "Обектно-ориенти­рано програмиране в .NET" ще видим как точно става това.

Изрази (expressions)


Програмен код, който се изчислява до някаква стойност, се нарича израз (expression). Изразите в C# имат синтаксиса на C++ и Java. Например:

a = b = c = 20; // израз със стойност 20

(а+5)*(32-a)%b // израз с числова стойност

"ала" + "бала" // символен израз (string)

Math.Cos(Math.PI/x) // израз с реална стойност

typeof(obj) // израз от тип System.Type

(int) arr[idx1][idx2] // израз от тип int

new Student() // израз от тип Student

(currentValue <= MAX_VALUE) // булев израз


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


Програмните конструкции (statements) имат синтаксиса на C++ и Java. Те биват няколко вида:

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


Елементарните програмни конструкции са най-простите елементи на прог­рамата. Например:

// присвояване (<променлива> = <израз>)

sum = (a+b)/2;


// извикване на метод

PrintReport(report);


// създаване на обект

student = new Student("Светлин Наков", 3, 42688);


Съставни конструкции


Съставните програмни конструкции се състоят от няколко други конструк­ции, оградени в блок. Например:

{

Report report = GenerateReport(period);

report.Print();

}

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


Конструкциите за управление, както в повечето езици за програмиране, биват условни конструкции, конструкции за цикъл, за преход и т. н. В C# синтаксисът на тези конструкции е много близък до синтаксиса на C++ и Java.

Условни конструкции (conditional statements)


Условните конструкции в С# са if, if-else и switch. Техният синтаксис е еднакъв със синтаксиса им в C, C++ и Java.

if и if-else конструкциите за разлика от С и С++ могат да приемат единствено булево условие. Не са позволени целочислени стойности, които да играят ролята на true, ако са различни от 0 и false – иначе. Ето няколко примера за условна конструкция:

if (orderItem.Ammount > ammountInStock)

{

MessageBox.Show("Not in stock!", "error");



}
if (Valid(order))

{

ProcessOrder(order);



}

else


{

MessageBox.Show("Invalid order!", "error");

}


Ново в switch конструкцията за разлика от C и C++ е, че позволява изразът, по който се осъществява условието, да бъде от тип string или enum. Например:

switch (characterCase)

{

case CharacterCasing.Lower:



text = text.ToLower();

break;


case CharacterCasing.Upper:

text = text.ToUpper();

break;

default:


MessageBox.Show("Invalid case!", "error");

break;


}

Конструкцията switch се различава от реализацията си в С++. В С# не се раз­решава "пропадане" (fall-through). Пропадането в switch кон­струк­циите може да доведе до грешки. Независимо от удобствата, които предлага тази възможност, дизайнерите на езика С# са преценили, че рискът за грешка поради пропускане на break е по-голям, затова всеки case етикет трябва задължително да завършва с break.

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


Конструкциите за повторение (iteration statements) са for-цикъл, while-цикъл, цикъл do-while и цикъл foreach – за обработка на колекции. Техният синтаксис е еднакъв със синтаксиса им в C, C++ и Java. Изключение прави foreach цикълът, който няма еквивалент в C и C++. Ето няколко примера:

Пример за for-цикъл:



// Отпечатваме числата от 1 до 100 и техните квадрати

for (int i=1; i<=100; i++)

{

int i2 = i*i;



Console.WriteLine(i + " * " + i + " = " + i2);

}


Пример за while-цикъл:

// Изчисляваме result = a^b

result = 1;

while (b > 0)

{

result = result * a;



b--;

}


Пример за цикъл do-while:

// Четем символи до достигане на край на ред

do

{



ch = ReadNextCharacter(stream);

}

while (ch != '\n');



Операторът foreach е приложим за масиви, колекции и други типове, които поддържат интерфейса IEnumerable или имaт метод за извличане на итератор (enumerator).

Пример за цикъл foreach:



string[] names = GetNames();
// Отпечатваме всички елементи на масива names

foreach (string name in names)

{

Console.WriteLine(name);



}

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


Конструкциите за преход в C# са: break, continueкоито се използват в цикли, goto – за безусловен преход и return – за връщане от метод. Те работят по същия начин, като в C, C++ и Java.

Пример за използване на конструкцията break:



// Търсим позицията на даден елемент target в масива a[]

int position = -1;

for (int i=0; i

{

if (a[i] == target)



{

position = i;

break;

}

}



return position;

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


Конструкциите за управление на изключенията в С# са: throw – за предизвикване на изключение, try-catch – за прихващане на изключе­ние, try-finally – за сигурно изпълнение на завършваща секция и try-catch-finally – за прихващане на изключение със завършваща секция.

Пример за предизвикване и прихващане на изключение:



// ...

public static void ThrowException()

{

// ...


throw new System.Exception();

}

// ...



public static void Main()

{

try



{

ThrowException();

}

catch(System.Exception e)



{

// ...


}

finally


{

// ...


}

}


Методът ThrowException() предизвиква изключение от тип Exception, което може да бъде прихванато, ако функцията, която го предизвиква, се намира в try-catch блок. В такъв случай може да се извършат действия в catch блока, в зависимост от информацията, която носи това изключение.

Конструкциите try-finally и try-catch-finally се използват най-вече за освобождаване на ресурси, които се използват в тялото им. Независимо дали възникне изключение при работата с даден ресурс, той трябва да бъде освободен накрая – това обикновено се прави във finally блок, който се изпълнява независимо дали се минава през catch блока. Блокът finally се изпълнява дори и да има return в catch или try блок.

В темата "Управление на изключенията в .NET" ще разгледаме подробно работата с изключения, техните особености и препоръките за правилна работа с тях.

Специални конструкции


Специалните конструкции в С# са: lock – за синхронизирано изпълнение, checked, unchecked – за контрол на аритметичните препълвания, unsafe – за директен достъп до паметта чрез указатели, fixed – за фиксиране на местоположението в паметта при работа с неуправляван код.




Сподели с приятели:
1   ...   15   16   17   18   19   20   21   22   ...   73




©obuch.info 2024
отнасят до администрацията

    Начална страница