Знайте, Intuit, лекция езикови изявления C #

Анотация: Целта на целия набор от оператори на езика C #. Ние обсъдят своите предимства и недостатъци. Оператори за присвояване избор и цикли са в основата на алгоритмичен процес. Считани за специални езикови оператори се опитват - улов - най-накрая, което позволява да се организира обработката на изключения. Помислете за добив на оператор, използван като итератори. Обсъжда темата на математически безкрайност и компютърни крайници. , Класическите алгоритми и имат за задача по тази тема.

Проектът на тази лекция може да бъде изтеглена от тук.

Съставът на # оператори С и техните синтаксиса и семантиката са получени от C ++. Както се полага на един потомък на частично допълнени състав предефинирани синтаксиса и семантиката на отделните оператори, аз се опитах да се подобри езиковите характеристики на добър програмист. Нека да видим как ще се управлява C # език.

Операторът на задача

В "изрази и операции" обсъдени подробно експресията на експлоатация и прехвърляне

и многобройни вариации, които позволяват да се изгради на изразните средства на формата:

Синтактично задача се състои от лява и дясна страни, разделени от задача. В дясната страна - този израз. включително експресия задача както в последния пример. В лявата страна - е променлива; по-точно: лявата страна е lvalue - лявата страна на експресията, което може да се задава стойност. Променливата е най-честата специален случай на lvalue.

експресия задача е пример за експресиране на страничен ефект. Прекият ефект от това изчисление израз е изчислената стойност и вида на изразяване ИЗРАЗ на. Страничен ефект е да се определи изчислената стойност на лявата променлива.

Експресия с страничен ефект в C # могат лесно да се превърнат в съответния оператор. Тя трябва да бъде израз завърши точката и запетаята, тъй като тя ще оператора, който може да се използва навсякъде, където синтактично валидни оператори език. Така синтактично задача оператор изглежда така:

И многобройни вариации са допустими:

и такива изявления могат да бъдат приписани на отчети за насочване. като:

Тези субекти са получени от съответния изрази страничен ефект - предоставяне края запетая. Когато изразяването с страничен ефект се превръща в оператори. страничен ефект се полагащото му се място и определя семантиката на оператора, както и изчисляването на стойността на израза става част от изпълнението на оператора на процеса.

Семантиката на задача

Изглежда, че семантиката на задачата е проста и очевидна - да се изчисли от дясната страна на изразяването и стойността му се възлага на съответната променлива ляво. Но това е само общо описание на семантиката. Детайли значително по-трудно. Фактът, че в ляво и дясно има вида им, и тези видове не могат да се сравняват. В този случай е необходимо да конвертирате от вида на дясна страна на лявата страна на вида. Понякога тази трансформация е безопасен и може да се управлява автоматично. Понякога тази трансформация е опасно, и ако възникне грешка, която често е открит по време на компилация.

Нека наречем оглед на лявата страна на оператора за присвояване, и източника - от дясната страна на оператора за присвояване. Източникът и целта може да бъде както смислен и референтен тип. Задачата ще се нарича позоваването. ако целта е препратка тип. В този случай, източникът трябва да бъде базов тип, или да се дава на този тип. Заданието ще се нарича значителен. ако типът на целева стойност. В този случай, източникът трябва да бъде тип стойност, или да се дава на този тип.

Операция "пакет" и "разопакова" - бокс и Unboxing

Възниква естествения въпрос: възможно е да се споменаваха променливи, свързани с обекти, съхранявани в купчината, дават значими променливи се съхраняват в стека? Възможно ли е да се извърши обратната операция? В C #, при условие че тези видове възможности за трансформация. Операция "пакет" (бокс) позволява типа на променливата стойност "пакет класа дрехи", създаване на обект на куп. Това преобразуване се извършва автоматично, когато целта е в класа на обекта. и източникът може да бъде променлива от всеки от съответните видове. Операция "разопакова" (Unboxing) позволява променлива от тип обект "на натиска и се екстрахира съхранява стойност". Това преобразуване се извършва автоматично. Екстрахираният стойност не запазва информация за типа си. Така че, преди да зададете тази стойност до целта, е необходимо да се доведе до желания тип. Отговорността за това намаление е на програмист.

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

Целта и на източника на тип стойност. Тук става дума за семантиката на значителна задача. В този случай, на източника и целта да има свой собствен памет за съхранение на ценности. Ако вида на целевата и източник мача, тогава няма проблем. ценности източник се копират и заменени с ценностите на съответните целеви области. Източник и мишена след това продължете да живеят самостоятелно. Те имат своя собствена памет съхраняване след възлагане на същата стойност. Ако типовете са различни, трябва да въвеждате реализация. То може да бъде в безопасност, а след това се стартира автоматично. В противен случай, тя трябва да бъде изрично посочено от програмист. Явните и скрити реализации в аритметиката тип, леене, методът на _Аналитична и методите за Convert клас са разгледани в детайли в "типове и класове. Променливите и обекти."

Целта и на източника на референтен тип. Тук имаме семантиката на препратка задача - референции задача. В този случай стойностите на изходната и целевата препратки към обекти, съхранявани в динамична памет ( "купчина"). Ако вида на източника и целта са едни и същи, тогава няма проблем. Целта на релето свързване към обекта, за който се отнася до заданието, и става позоваване на обекта, свързани с източника. Резултат Референтен задача двойна. Целта посочен от целта губи един от нейните връзки и може да се "виси" - един безполезен предмет, който вече не е посочен, така че съдбата му ще определи боклукчията.

След възлагане на обекта в паметта, която се позовава на източник, сега е свързан с най-малко две връзки, се считат за един обект различни имена. Референтен задача води до създаването на псевдоними - до появата на различни имена от същия обект. Особено необходимо е да се вземе предвид ситуацията, в която целта и / или източник е настроен на нула - нула номер не се отнасят към всеки обект. Ако тази стойност е източникът, целта за възлагане резултат отнема тази стойност и вече не се отнася за всеки обект. Ако целта е създадена за нула. и източника - не, в резултат на прехвърлянето, преди да "виси" целта е препратка към обекта, свързани с източника.

Ако видовете източници и целите са различни, тогава заданието без никаква трансформация е възможна само ако източникът е потомък на родителския клас, конкретната цел. Целта е родител, може да бъде свързана с предмета на тяхното потомство, тъй като в този случай всички полета и методите на майка и поколението са и ще бъдат определени.

Ако целта не е собственост на родителския клас на източника, а след това еталонно определяне е възможно, само ако това е изрично определен гласове, но след това цялата отговорност за успеха на тази трансформация е на програмист, за да сте сигурни, че обектът източник, свързан връзка, наистина принадлежи към класа на мишената обект.

Целта на референтен тип, тип източник стойност. В този случай, "на муха" тип стойност се превръща в справка. Как е двойствеността на съществуване смислени и референтни типове - променлива и се противопостави? Отговорът е прост: за сметка на ефективност на продажбите операция "пакет" (бокс), изпълнява автоматично.

Тази задача е възможно само, когато целта е в класа на обекта. Тъй като класът обект е майка на всички класове, включително и за съответните класове за такова прехвърляне няма грешка няма да се случи, винаги е възможно.

Целта на смислен вид, референтен източник тип. В този случай, "в движение" тип достъп се превръща в значим. Операция "разопакова" (Unboxing) изпълнява обратната операция - е "люспи" обект кутия и извлича съхранява стойност. Забележка операция "разархивирайте" не е обратната операция на "пакет" в тесния смисъл на думата. Оператор обект OBJ = х е правилна, но тя изпълнява следното изявление х = OBJ ще доведе до грешка. Не е достатъчно, за да се съхранява на стойност в пълен обекта точно съвпада с типа на променливата, която се възлага на обекта. Трябва изрично да се уточни превръщането на желания тип.

Блок или композитен оператор

Синтактично блок възприема като един оператор, и може да се използва навсякъде в конструкции, при които синтаксисът изисква един оператор. Тялото на линия. клон на ако изявлението. обикновено представлява от единица.

нулева декларация

Празен изявление - е "празен", завършва с точка и запетая. Понякога е полезно да се помисли за отсъствие на оператори като съществуващата празен изявлението. Ето един пример: