|
Главная » 2010 » Февраль » 10 » Операторы присваивания
23:59 Операторы присваивания |
Операторы присваивания До настоящего момента мы пользовались простым оператором присваивания = , и кому-то может показаться удивительным, что существуют какие-либо другие операторы присваивания. Однако они действительно существуют и, что кажется еще более удивительным, оказываются весьма полезными! Все другие операторы присваивания работают схожим с оператором = обра- зом. Так же, как и у оператора =, результат их выполнения — присваивание рас- положенной слева переменной значения, вычисленного посредством операторов и операндов, расположенных в правой части. Представим эти операторы и объяснение их работы в табличной форме: Оператор Значение Пример использования Результат в выражении Бинарное += Бинарное -= Бинарное *= Бинарное /= Бинарное %= Бинарное varl = var2; varl += var2; varl -= var2; varl *= var2; varl /•« var2; varl %= var2; Переменной varl присваивается значение переменной var2 Переменной varl присваивается значение, которое представляет собой сумму переменных varl и var2 Переменной varl присваивается значение, которое представляет собой разность, полученную в результате вычитания переменной var2 из переменной varl Переменной varl присваивается значение, которое представляет собой произведение переменных varl и var2 Переменной varl присваивается значение, полученное в результате деления переменной varl на переменную var2 Переменной varl присваивается значение, являющееся остатком от деления переменной varl на переменную var2 Как вы могли заметить, результатом использования дополнительных операто- ров присваивания является вовлечение переменной varl в вычисления, т. е. код вроде: приводит к получению точно такого же результата, что и код: varl = varl + var2; Переменные и выражения 41 Обратите внимание, что оператор += может использоваться и со строками, так же, как и оператор +. Использование этих операторов, особенно при работе с длинными именами пе- ременных, позволяет сделать программу намного более удобочитаемой. Старшинство операторов При вычислении выражения все операторы выполняются в определенной по- следовательности. Это не означает, что они всегда выполняются слева направо. В качестве самого простого примера рассмотрим следующий оператор: Здесь оператор + выполняется перед оператором =. Существуют и другие ситуации, когда старшинство операторов не совсем оче- видно, например: varl = var2 + var3 * var4; В этом выражении сначала будет выполнен оператор *, затем оператор + и по- следним — оператор = . Это принятый в математике стандартный порядок выпол- нения операций, он приведет к получению того же самого результата, который можно ожидать при выполнении аналогичных арифметических вычислений на бу- маге. Мы также можем управлять порядком выполнения операторов с помощью ско- бок, например: varl = (var2 + var3) * var4; В данном случае в первую очередь будет выполняться то, что содержится в скобках, то есть оператор + будет выполнен перед оператором *. Для всех рассматриваемых операторов порядок выполнения показан ниже; при этом операторы с одинаковым старшинством (такие как * и /) выполняются в порядке своего следования слева направо: Старшинство Операторы Высшее ++, -- (используемые в качестве префиксов); +, - (унарные) *. Л % +. - =, * = , / = , % = , + = , - = Низшее . ++, -- (используемые в качестве суффиксов) Для изменения порядка выполнения операторов используются скобки, как говорилось выше. Пространства имен Прежде чем мы двинемся дальше, представляется целесообразным потратить некоторое время на еще один важный аспект — пространства имен. Это способ, используемый в .NET, который позволяет создавать контейнеры для кода прило- жений, чтобы и код, и его составные части были однозначно идентифицированы. 42 Глава 3 Пространства имен используются также в качестве средства категоризации объек- тов в .NET Framework. Большинство таких объектов представляют собой опреде- ления типов, например, определения простых типов, которые подробно рассматри- ваются в данной главе (system.mt32 и т. д.). Код С# по умолчанию содержится в глобальном пространстве имен. Это озна- чает, что к объектам в коде С# можно обратиться из любого другого кода в гло- бальном пространстве имен просто по их имени. Можно воспользоваться ключевым словом namespace для того, чтобы явно задать пространство имен для любого блока кода, заключенного в фигурные скобки. Имена, находящиеся в таком про- странстве имен, если к ним обращаются не из данного пространства имен, должны квалифицироваться. Квалифицированным именем называется имя, в котором содержится вся ин- формация касательно его иерархии. Это означает, что если у нас имеется код, находящийся в одном пространстве имен, и необходимо воспользоваться именем, определенным в другом пространстве имен, то нам следует использовать ссылку на это пространство имен. В квалифицированных именах для разделения уровней пространств имен используется символ точки. Например: namespace LevelOne { . ' ;.::':;хГх;; / / программа, находящаяся в пространстве имен LevelOne •// в ней описывается имя "NameOneV /1 программа, находящаяся в глобальном пространстве имен В этой программе описывается единственное пространство имен — LevelOne. (Обратите внимание, что в данном случае в программе не содержится никакого ис- полняемого кода. Это сделано для того, чтобы придать обсуждению максимально общий характер; напротив, в код помещен комментарий, в котором содержится это описание.) Код, содержащийся внутри пространства имен LevelOne, может просто ссылаться на имя NameOne, и никакой классификации не требуется. Однако в коде, находящемся в глобальном пространстве имен, необходимо использовать класси- фицированное ИМЯ LevelOne.NameOne ДЛЯ ТОГО, чтобы на него СОСЛатьСЯ. Внутри любого пространства имен мы можем описывать вложенные простран- ства имен, используя то же самое ключевое слово namespace. При обращение к вложенным пространствам имен следует указывать всю их иерархию, отделяя один уровень иерархии от другого с помощью точки. Это лучше всего проиллюст- рировать с помощью примера. Рассмотрим следующие пространства имен: namespace LevelOne •: •',:. • ::: •:: • < -;:. ШШ\ ШШЖШШШУШШШШМУУ-. ШУУШУ • ., . :,; • //программа, находящаяся в пространстве имен LevelOne namespace LevelTwo // программа, находящаяся в пространстве имен LevelOne.LevelTwo : // в ней описывается имя "NameTwo" > ' :' , "У У X ' •; ;^х:: •• • ШИШ<}'. ••;•>• Sy-ЩШ-уу- >Т'^УЛШ Л : : %гЖ±:; -Ш-, Т.-^-гУ'.. ШУ:УШМ^У^ УУ-УУУ---У- //программа, находящаяся в глобальном пространстве имен Переменные и выражения В данном случае обращение к имени NameTwo из глобального пространства имен ДОЛЖНО иметь ВИД LevelOne.LevelTwo.NameTwo, ИЗ Пространства Имен LevelOne — LevelTwo.NameTwo, а ИЗ пространства имен LevelOne.LevelTwo — NameTwo. Здесь нужно отметить, что имена идентифицируются пространствами имен уникальным образом. Мы можем описать одно и то же имя •NameThree" как В Пространстве имен LevelOne, так И В Пространстве имен LevelTwo: namespace LevelOne { // здесь описывается имя "NameThree" namespace LevelTwo { //здесь описывается имя "NameThree* В данном случае описаны два разных имени, которые могут использоваться незави- симо друг ОТ Друга — LevelOne.NameThree И LevelOne.LevelTwo.NameThree. После того, как пространство имен определено, появляется возможность ис- пользовать оператор using для упрощения доступа к содержащимся в нем именам. Оператор using как бы говорит: "Да, нам действительно понадобится доступ к именам из данного пространства имен, поэтому не заставляйте меня классифи- цировать их каждый раз". Например, в следующей программе предполагается, что код, находящийся в пространстве имен LevelOne, должен иметь доступ к именам пространства имен LevelOne.LevelTwo без какой бы то ни было классификации: namespace LevelOne { using LevelTwo; namespace LevelTwo : . ••; II здесь описывается имя "NameTwo* Код, находящийся в пространстве имен LevelOne, теперь может обращаться К Level Two. NameTwo ПрОСТО как К NameTwo. Бывают случаи, как в примере с NameThree, когда такой подход может приво- дить к конфликту между именами, находящимися в различных пространствах имен (при этом код, скорее всего, компилироваться не будет). В подобных случаях мы можем задать для пространства имен подставное имя (alias) в операторе using; namespace LevelOne { .. , • \ ' '" . у.-;.- using LT• = LevelTwo; // здесь описывается имя "NameThree" namespace LevelTwo // здесь описывается имя "NameThree* Тогда В Пространстве имен LevelOne М Ы СМОЖем обращаться К LevelOne.NameThree просто как К NameThree, а К LevelOne.LevelTwo.NameThree как К LT.NameThree. Итоги Глава 3 Операторы using оказывают влияние на то пространство имен, в котором они находятся, а также на все вложенные пространства имен, которые могут содер- жаться в данном пространстве имен. В вышеприведенном коде в глобальном про- странстве имен ИСПОЛЬЗОВать LT.NameThree нельзя. Однако еСЛИ оператор using расположить следующим образом: •Ifffl // здесь описывается имя "NameThree" namespace LevelTwo ,....: //здесь описывается имя "NameThree* ; Щ ' V • ' ' ;- ШШШ^ Ш:'•<•••:• }^ ШШШ\ • U;• •;:••:: \ - 'Ш. •:: ::-:•:• Ш-Щ : -;:::? >• ;: :.) WiШ.?-;-'. -.: >• : •::: ' Ш Ш - то использовать имя *LT. NameThree• можно будет и из глобального пространства Имен, И ИЗ пространства Имен LevelOne. Существует еще один немаловажный момент, на который следует обратить внимание. Оператор using сам по себе не обеспечивает доступа к именам, находя- щимся в других пространствах имен. До тех пор, пока код из пространства имен не будет каким-либо способом привязан к нашему проекту (например, описан в ис- ходном файле проекта или описан в каком-либо коде), привязанному к этому про- екту, мы не получим доступа к содержащимся в нем именам. Более того, если код, в котором содержится некое пространство имен, привязан к нашему проекту, то мы обладаем доступом к содержащимся в нем именам независимо от использова- ния оператора using. Оператор using всего лишь упрощает обращение к этим именам и позволяет сократить сильно удлиняющийся в противном случае код, де- лая его более понятным. Вернувшись к программе ConsoieAppiicationi, с которой мы работали в самом начале данной главы, мы сможем обнаружить там следующие строки кода, относя- щиеся к пространствам имен: using System; namespace ConsoieAppiicationi В первой строке располагается оператор using, в котором объявляется, что пространство имен System будет использоваться во всей программе С# и доступ к нему из любых пространств имен данного файла должен осуществляться без ис- пользования классификации. Пространство имен System является корневым про- странством имен в .NET Framework и включает все основные функциональные возможности, которые могут понадобиться для консольных приложений. В следующей строке объявляется пространство имен для самого приложения ConsoieAppiicationi. В данной главе вы познакомились с основополагающей информацией, необхо- димой для создания работающих приложений на С#. Были рассмотрены основы синтаксиса С# и стандартный код консольного приложения, который генерируется VS при создании проекта консольного приложения. 45 :TJ:zr вопросам и с — *— их можно создавать, ^ п р и с в а и в а т ь 1 7 ™ " ^ П еРе М е н н ы е , каким образом над ними и над теми значениямикотооые* * * * " * ВЫП°ЛНЯТЬ ^ п у л я ц и и рассматривались основные аспекты в з Г — С о д е Р ™ - Параллельно с этим и условны, ветвГГи"
|
Категория: информатика |
Просмотров: 957 |
Добавил: basic
| Рейтинг: 0.0/0 |
|
Статистика
Онлайн всего: 1 Гостей: 1 Пользователей: 0
|