Byte case catch char checked 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Byte case catch char checked



Abstract as base booI 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 void

Volatile while

Знаки операций — это один или нес-ко символов, определяющих действие над операндами. Внутри знака операции не может быть пробелов (пробел — это всегда разделитель). Нап-р, в выражении x+y знак + означает операцию сложения, а x и y яв-ся операндами. Операнд — это константа, переменная или вызов метода (функции). Операнды, связанные знаками операций, образуют выражения. Понятие «выражение» в языке програм-ия соответствует понятию «словосочетание» в языке человека. Тип выражения определяется типом операндов. Разделитель используются для разделения или для группировки элементов. Примеры: пробелы, скобки, точка, запятая. Литералы (константы)— это величины, которые неизменны. В C# допустимы целые, вещественные, символьные, строковые, логические константы и константа null. Компилятор определяет тип константы по ее внешнему виду. Целые числа могут запис-ться в 10-ной системе счисления или в16-ной. Во втором случае в начале числа ставятся символы 0x или 0X. Вещественные числа запис-ся только в 10-й сис-ме счисления, но в2-х формах: с фиксированной точкой и с порядком. Символьная константа представляет собой любой символ в кодировке Unicode. Под символ отводится 2 байта. Имеется 4 формы записи символьных констант:- обычный символ, имеющий графическое представление (кроме апострофа), например, 'A', '+' и т.д.;- управляющая последовательность — '\n', '\0';- символ в шестнадцатеричном коде — '\x20', '\xFF';- символ в виде escape -последовательности Unicode'\uA81B'. Управляющая последовательность (escape-послед-сть) представляет собой определенный символ, перед которым стоит обратная косая черта. При этом два эти знака считаются за один символ. Комментарии — это фрагменты программы, которые не обрабатываются компиляторов, а ис-тся для пояснения текста программы. Виды:- Однострочный комментарий — начинается с двух символов «косая черта»;-Многострочный комментарий — начинается с пары символов /* и заканчивается парой */. - Комментарии для автоматической генерации документации в XML-формате. Они начинаются с «///» (///<summary>)

Тип данных характеризует основные св-ва данных: возможные действия с данными, их внутреннее представление, диапазон допустимых значений, размер.

Все типы данных условно можно подразделить на простые (обычно это встроенные типы) и структурированные (структуры, классы). все простые типы и структуры относятся к значащим типам (в переменных таких типов непосредственно хранятся значения данных соответствующих типов), а классы — к ссылочным типам. Память для переменных значащих типов выделяется в стеке, для ссылочных объектов — в (heap). Работа со стековой памятью ведётся значительно быстрее, чем с памятью в heap. Рассм-им подробнее простые типы:- целые типы, вещественные, символьные, логические. Целые типы данных предназначены для хранения целых чисел. Все целые типы можно подразделить на знаковые и беззнаковые. Примеры объявления переменных целых знаковых типов: sbyte y; short t; int x; long r; Примеры целых беззнаковых типов: byte a; ushort b; uint k; ulong j; Для работы с действительными числами в языке C# имеется два вещественных типа: float (одинарная точность) и double (удвоенная точность). Символьный тип: Для хранения отдельных символов используется тип char. Так как в языке C# для кодирования символов используется Unicode, то под каждый символ отводится 2 байта. Логический тип: Для работы с логическими величинами используется тип bool. Допустимы два значения: true и false. Переменная — это ячейка памяти для временного хранения данных. Предполагается, что в процессе выполнения программы значения переменных могут изменяться. Операции — это действия над данными. Данные, участвующие в операции, часто наз-ют операндами. В качестве операнда может выступать константа, переменная или вызов какого-нибудь метода. Для каждой операции испол-тся соотв-щий ей знак операции, сост-щий из одного или нескольких символов. В результате выполнения операций всегда получается какое-то значение, представляющее собой результат выполнения операции. В языке С# существует много операций. Их можно классифицировать по признакам: по кол-ву операндов, по назначению. есть одноместные, двухместные и одна трёхместная операция. арифметические, операции сравнения, логические, побитовые, специальные. Выражение представляет собой последовательность из одного или нескольких операндов и от нуля до нескольких операторов, которую можно вычислить, получив в результате одно значение, объект, метод или пространство имен.

Преобразованиями типов. Иногда может быть необходимым скопировать значение в переменную или параметр метода другого типа. Например, может быть переменная, которую требуется передать методу, параметр которого имеет тип double. Или может понадобиться присвоить переменную класса переменной типа интерфейса. - Неявные преобразования. Не требуется никакого специального синтаксиса, поскольку преобразование безопасно для типов и данные не теряются- Явные преобразования (приведения) Приведение требуется, когда при преобразовании может быть потеряна информация, или когда преобразование может завершиться неудачей по другим причинам. К типичным примерам относится числовое преобразование в тип, который имеет меньшую точность или меньший диапазон значений.- Преобразования с помощью вспомогательных классов.

4. Операторы языка С#.Обзор операторов языка С# в сравнении с С++. Программирование циклов, операторы передачи управления. Обработка исключительных ситуаций. Примеры программ. Оператор — это законченное предложение, записанное на каком-либо языке программирования. Операторы условно можно подразделить на две категории: исполняемые — с их помощью реализуется алгоритм решаемой задачи, и описательные, необходимые для определения типов пользователя и объявления объектов программы, например, переменных. Все исполняемые операторы можно разбить на две группы: простые и структурированные. К простым операторам относ-ся оператор присваивания, пустой оператор, операторы переходов(goto, break, continue, return), оператор-выражение, вызов метода как отдельного оператора. Простые операторы: Оператор присваивания — это самый употребительный оператор. Его назначение — присвоить новое значение какой-либо переменной. В C# имеется три формы этого оператора. Простой оператор присваивания записывается так: переменная = выражение; Он работает вначале вычисляется выражение, записанное справа от символа операции =, полученный результат присваивается переменной, стоящей слева от знака =. Тип результата должен совпадать с типом переменной, записанной слева, или быть к нему приводимым. x=3; r=x; y=x+3*r; s=Math.Sin(x);

Множественное присваивание — в таком операторе последовательно справа налево нескольким переменным присваивается одно и то же значение a=b=c=1; Присваивание с одновременным выполнением какой-либо операции п еременная знак_операции = выражение; или переменная = переменная знак_операции выражение; s += 5; ил и s = s + 5;

Пустой оператор: (он используется, когда по синтаксису оператор требуется, а по смыслу — нет) 1-й; //' выполняется операция инкремента.а *≪ b + с; // выполняется умножение с присваиванием.fu!)(i. k): // выполняется вызов функции.w h i l e (t r u e): // цикл из пустого оператора (бесконечный) Блок, или составной оператор, — это последовательность описаний и операторов,заключенная в фигурные скобки.

Операторы ветвления if и switch применяются для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов. Условный оператор if испол-тся для разветвления процесса вычислений па

два направления.

Формат оператора:if (логическоевыражение) оператор _1; [ else оператора; ] Оператор выбора

s w i t c h (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Switch case 1

Выражение Операторы 1

 

case 2 Операторы 2

case п > Операторы п

default Операторы

Формат оператора:switch С выражение){

case константное_выражение_1: [ список_операторов_1 ]

case константное_выражение_2: [ список_операторов_2 ]

case константноевыражениеп: [ списокоператоровп ]

[ default: операторы ]

Выполнение оператора начинается с вычисления выражения. Тип выражент чаще всего целочисленный (включая c h a r) или строковый1. Затем управлет перелается первому оператору из списка, помеченному константным выраженем, значение которого совпало с вычисленным. Каждая ветвь переключателя должна заканчиваться явным оператором перехда, а именно оператором break, goto или r e t u r n:- оператор break выполняет выход из самого внутреннего из объемлющих е

операторов s w i t c h, f o r, w h i l e и do;- оператор goto выполняет переход на указанную после него метку, обычно это метка case одной из нижележащих ветвей оператора s w i t c h;- оператор r e t u r n выполняет выход из функции, в теле которой он записан.

Операторы цикла. используются для вычислений, повторяющихся многократно. С# имеется четыре вида циклов: цикл с предусловием whi 1е, цикл с постусловием repeat, цикл с параметром for и цикл перебора foreach. Блок, ради выполнения которого и организуется цикл, называется телам цикла.

Остальные операторы служат для управления процессом повторения вычислений. Один проход цикла называется итерацией. Начальные установки служат для того, чтобы до входа в цикл задать значения

переменных, которые в нем используются. Параметром цикла называется переменная, которая используется при проверке условия продолжения цикла и принудительно изменяется на каждой итерации,причем, как правило, на одну и ту же величину. Если параметр цикла целочисленный,

он называется счетчиком цикла. Он есть не у всякого числа. Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue, return и goto.

Цикл с предусловием while Формат оператора прост: while (выражение) оператор. Выражение должно быть логического типа. Если результат вычисления выражения равен true, выполняется простой или составной оператор. Эти действия повторяются до того момента, пока результатом выражения не станет значение false После окончания цикла управление передается на следующий за ним оператор.Рекуррентной называется формула, в которой новое значение переменной вычисляется

с использованием ее предыдущего значения.. Выражение вычисляется перед каждой итерацией цикла. Если при первой проверке выражение равно false, цикл не выполнится ни разу.

Цикл с постусловием do Сначала выполняется простой или составной оператор, образующий тело цикла,а затем вычисляется выражение (оно должно иметь тип b o o l). Если выражение

истинно, тело цикла выполняется еще раз и проверка повторяется. Цикл завершается,

когда выражение станет равным f a l s e или в теле цикла будет выполнен какой-либо оператор передачи управления.Этот вид цикла применяется в тех случаях, когда тело цикла необходимо обязательно выполнить хотя бы один раз, например, если в цикле вводятся данныеи выполняется их проверка. Если же такой необходимости нет, предпочтительнее пользоваться циклом с предусловием.

программа, выполняющей проверку ввода, приведен в листинге: us i n g System:

namespace C o n s o l е А р р I i c a t i o n i

c l a s s Classl { static void MainO char answer: do

Console.WriteLineC "Купи слоника, a?"): answer = (char) Console.Read О; Console.ReadLineO;

w h l i e (answer!=• у');

 

Цикл с параметром for. формат: for (инициализация; выражение; модификации) оператор; Инициализация служит для объявления величин, используемых в цикле, и присвоения

им начальных значений. Выражение типа bool определяет условие выполнения цикла: если его результат равен t r u e, цикл выполняется. Цикл с параметром реализован как цикл с предусловием. Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла. В части модификаций можно записать несколько

операторов через запятую: -~:г (i n t i = 0, j = 20; i < 5 && j > 10; i + +, j - -)... Простой или составной оператор представляет собой тело цикла. пример вычислим сумму чисел от 1 до 100: • " t 5 - 0: - V (i n t i - 1, i <- 100; i++) s += i:

using System:

namespace C o n s o l e A p p l i c a t i o n l

c l a s s Classl

{ static void MainO

double Xn = -2, Xk = 12. dX = 2. t = 2, y;

Console.WriteLineC "| x | у |"; // заголовок таблицы

f o r (double x = Xn; x <= Xk: x += dX) // 1, 4, 5

У - t; // 2

i f (x >= 0 && x < 10) у = t * x;// 2

i f (х >= 10) у = 2 * t; //2

Console.WriteLineC "| {0,6} | {1.6} |". х, у): // 3 }}}}Любой цикл w h i l e может быть приведен к эквивалентному ему циклу f o r и оборот.

Цикл перебора foreach Цикл foreach используется для просмотра всех объектов из некоторой труп данных.

Операторы передачи управления. В С# есть пять операторов, изменяющих естественный порядок выполнения вычислений:- оператор безусловного перехода goto; -оператор выхода из цикла break;- перехода к следующей итерации цикла continue;- возврата из функции r e t u r n; генерации исключения throw. Оператор goto используется в одной из трех форм:goto метка;goto case константное_выражение;goto default. В теле той же функции должна присутствовать ровно одна конструкция вида метка: оператор; Метка — этс обычный идентификатор, областью видимости которого является функция, в теле которой он задан. Использование этой формы оператора безусловного перехода оправдано в2-х случаях: принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей; переход из нескольких точек функции вниз по тексту в одну точку. Вторая и третья формы оператора goto используются в теле оператора выбора switch. Оператор goto case константное_выражение передает управление на соответствующую константному выражению ветвь, а оператор goto default — на ветвь default.(лучше его не использовать).

Оператор break используется внутри операторов цикла или выбора для перехода

в точку программы, находящуюся непосредственно за оператором, внутри которого

находится оператор break.

Оператор continue Оператор перехода к следующей итерации текущего цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало

следующей итерации. f o r С i n t n = 0; Math.Abs(ch) > e; n++){

ch *= x * x / (2 * n + 1) / (2 * n + 2);

у += c h;

if (n <= Maxlter) continue;

done = f a l s e: break;}

Оператор return

Оператор возврата из функции return завершает выполнение функции и передает

управление в точку ее вызова. Синтаксис оператора: return [ выражение ]; Тип выражения должен иметь неявное преобразование к типу функции. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.

Обработка исключительных ситуаций языке С# есть операторы, позволяющие обнаруживать и обрабатывать ошибки, возникающие в процессе выполнения программы Исключительная ситуация, или исключение, — это возникновение аварийного события,которое может порождаться некорректным использованием аппаратуры пли неправильной работой программы. Исключения позволяют логически разделить вычислительный процесс на две части— обнаружение аварийной ситуации и ее обработка. достоинство исключений состоит в том, что для передачи информации об ошибке в вызывающую функцию не требуется применять возвращаемое значение или параметры, поэтому заголовки функций не разрастаются. Исключения генерирует либо среда выполнения, либо программист с помощью оператора throw.

Ari thmeti cExcepti on Ошибка в арифметических операциях или преобразованияхDivideBeZeroException и OverFlowException)

ArrayTypeMi smatchExcepti on Попытка сохранения в массиве элемента несовместимого

тина

Di vi deByZeroExcepti on Попытка деления на ноль

FormatException Попытка передать в метод аргумент неверного формата

IndexOutOfRangeException Индекс массива выходит за границы диапазона

InvalidCastException Ошибка преобразования типа

OutOfMemoryExcepti on Недостаточно памяти для создания нового объекта

OverFlowException Переполнение при выполнении арифметических операций

StackOverR owExcepti on Переполнение стека

Исключения обнаруживаются и обрабатываются в операторе t r y. Оператор try содержит три части: контролируемый блок — составной оператор, предваряемый ключевым словомtry. В контролируемый блок включаются потенциально опасные операторы программы.- один или несколько обработчиков исключений — блоков catch, в которых описывается,как обрабатываются ошибки различных типов;- блок завершения finally выполняется независимо от того, возникла ошибка в контролируемом блоке или нет.

Синтаксис оператора try: try блок [ блоки catch ] [ блок finally ] Обработчики исключений должны располагаться непосредственно за блоком t r y.Они начинаются с ключевого слова catch, за которым в скобках следует тип обрабатываемого исключения. Синтаксис обработчиков напоминает определение функции с одним параметром— типом исключения. Существуют три формы записи:catch(тип имя) {... /* тело обработчика */ }

catch(тип) {.../* тело обработчика */ }

catch {... /* тело обработчика */ } Первая форма применяется, когда имя параметра используется в теле обработчика для выполнения каких-либо действий, например вывода информации об исключении. Вторая форма не предполагает использования информации об исключении, играет роль только его тип. Третья форма применяется для перехвата всех исключений. Так как обработчики просматриваются в том порядке, в котором они записаны, обработчик третьего типа. Использование исключений для проверки ввода

using System;

namespace ConsoleApplicationi

{ class Program

{ static void MainO{

string buf;

double u, i, r;

try{Console.WriteLineC "Введите напряжение:");

buf = Console.ReadLineO;

u = double.ParseC buf);

Console.WriteLineC "Введите сопротивление:"):

buf = Console.ReadLineO;

r- = double. ParseC buf);

i = u / r;

Console.WriteLineC "Сила тока - " + i);}

catch (FormatException){

Console.WriteLineC "Неверный формат ввода!");}

catch // общий случай{

Console.WriteLineC "Неопознанное исключение");}}}}

Оператор throwДля генерации исключении используется оператор throw спараметром, определяющим вид исключения.Параметр должен быть объектом, порожденным от стандартного классаSystem.Exception. Этот объект используется для передачи информации об исключенииего обработчику.

 

5. Классы Состав класса. Объекты. Данные класса. Методы. Конструкторы. Свойства. Перегрузка методов. Рекурсивные методы. Методы с переменным числом аргументов. Индексаторы. Деструкторы. Класс является типом данных, определяемым пользователем. Он должен представлять собой одну логическую сущность. Класс — это тип, создаваемый пользователем. Классы являются основным строительным материалом программ, написанных на языке C#. Если в C++ классы используют только в случае необходимости (их можно и вообще не применять!), то в C# всё построено на классах. Элементами класса являются данные и функции, предназначенные для их обработки. Тело класса — это список описаний его элементов, заключенный в фигурные скобки. Спецификаторы определяют свойства класса, а также доступность класса для других элементов программы. Каждый раз, когда создается класс или структура, вызывается конструктор. Конструктор предназначен для инициализации объекта. Он вызывается автоматически при создании объекта класса с помощью операции new. Имя конструктора совпадает с именем класса. Ниже перечислены свойства конструкторов: - не возвращает значение, даже типа void;- Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации;- Если программист не указал ни одного конструктора или какие-то поля не были инициализированы, полям значимых типов присваивается нуль, полям ссылочных типов — значение n u l l. Конструктор, вызываемый без параметров, называется конструктором по

умолчанию. Класс с конструктором

usi-ng System;

"=mespace C o n s o l e A p p l i c a t i o n i

c l a s s Demo{

p u b l i c Demo(i n t a, double у) // конструктор с параметрами{

t h i s. а = а;

t h i s. у = у:}

p u b l i c double GetyO // метод получения поля у{

r e t u r n у;}

i n t а;

double у;}

c l a s s Classl

{ s t a t i c void MainO{

Demo a = new Demo(300, 0.002) // вызов конструктора

Console.WriteLineC a.GetyO): // результат; 0,002

Demo b = new Demo(1, 5.71); // вызов конструктора

Console.WriteLineC b.GetyO);}}} // результат: 5,71

Деструкторы используются для уничтожения экземпляров классов. Класс может иметь только один деструктор; Деструкторы не могут наследоваться или перегружаться; Деструкторы невозможно вызвать. Они запускаются автоматически; Деструктор не принимает модификаторы и не имеет параметров. Индексаторы позволяют индексировать экземпляры класса или структуры так же, как массивы. Индексаторы напоминают свойства, но их методы доступа принимают параметры. Индексаторы позволяют индексировать объекты аналогично массивам. Ключевое слово this используется для определения индексаторов. Ключевое слово value используется для определения значения, присваиваемогометодом set индексатора.

Индексаторы не должны использовать в качестве индекса целочисленное значение; конкретный механизм поиска определяет разработчик. Индексаторы можно перегружать. Индексаторы могут иметь более одного формального параметра, например при доступе к двухмерному массиву. Чтобы объявить индексатор для класса или структуры, используйте ключевое слово this как public int this[int index] // Indexer declaration{ // get and set accessors} У классов есть методы - это процедуры в составе класса
class MyClass {
public int GetValue() {return 5;}
string Getstr() {return "df";} }
есть поля класса. Это переменные
class MyClass {
public int Value;
string stroka; }
Также внутри класса может быть объявлен другой класс, применяемый например для вспомогательных нужд
class MyClass {
private class Help {public void HelpMe(){ // вспомогательный код }}}}
Если же посмотреть на классы с точки зрения их взаимодействия между собой, то оно происходит через члены объявленные с модификатором public(и некоторых других).
Набор членов доступных публично можно назвать интерфейсом взаимодействия. А скрытые private и protected члены не доступны извне и используются для реализации внутренней функциональности класса(инкапсуляция). Рекурсивным называют метод, если он вызывает сам себя в качестве вспомогательного. В основе рекурсивного метода лежит так называемое «рекурсивное определение» какого-либо понятия. Свойства служат для организации доступа к полям класса. Как правило, свойствосвязано с закрытым полем класса и определяет методы его получения и установки.Синтаксис свойства: [ атрибуты ] [ спецификаторы ] тип имясвойства{[ get коддоступа ] [ set код_доступа ]} Значения спецификаторов для свойств и методов аналогичны. Чаще всего свойства объявляются как открытые (со спецификатором public), поскольку они входят в интерфейс объекта. Код доступа представляет собой блоки операторов, которые выполняются при получении (get) или установке (s e t) свойства. Может отсутствовать либо часть get, либо set, но не обе одновременно. Если отсутствует часть set, свойство доступно только для чтения (read-only),если отсутствует часть get, свойство доступно только для записи (write-only). Пример описания свойств:j j b l ic class Button: Control

private string caption; // закрытое поле, с которым связано свойство

public string Caption { // свойство

get { // способ получения свойства

return caption;}

set { // способ установки свойства

if (caption!= value) {

caption = value;

 

6. Массивы и строки в C#.Массивы в C#. Одномерные массивы. Прямоугольные и ступенчатые массивы. Класс System.Array. Оператор foreach при работе с массивами. Массивы объектов. Символы и строки. Массив относится к ссылочным типам данных, то есть располагается в динамической области памяти, поэтому создание массива начинается с выделения памяти под его элементы. Элементами массива могут быть величины как значимых,так и ссылочных типов. Массив значимых типов хранит значения, массив ссылочных типов — ссылки на элементы. Всем элементам при создании массива присваиваются значения по умолчанию: нули для значимых типов и null — для ссылочных. Элементы массива нумеруются с нуля, поэтому максимальный номер элемента

всегда на единицу меньше размерности (например, в описанном выше массиве

w элементы имеют индексы от 0 до 9). Для обращения к элементу массива после имени массива указывается номер элемента в квадратных скобках.(4 4 ] z[i]) Массивы одного типа можно присваивать друг другу. При этом происходит присваивание ссылок, а не элементов, как и для любого другого объекта ссылочноготипа, например:i n t [ ] а = new int[10];

i n t [ ] b = а; // b и а указывают на один и тот же массив. Одномерные массивы используются в программах чаще всего. Варианты описания массива:тип[] имя:тип[] имя = new тип [ размерность ];тип[] имя = { списокинициализаторов };тил[] имя = new тип [] { списокинициализаторов };тип[] имя = new тип [ размерность ] { списокинициализаторов };При описании массивов квадратные скобки являются элементом синтаксиса, а не

указанием на необязательность конструкции. Примеры описаний (один пример для каждого варианта описания): i n t [ ] а //1элементов нет

i n t [ ] b //2элементы равны О

i n t [ ] с = { 61. 2, 5, -9 }: //3new подразумевается

i n t [ ] d = new i n t [ ] { 61. 2, 5. -9 //4размерность вычисляется

i n t [ ] e = new int[4] { 61. 2, 5. -9 //5избыточное описание

Здесь описано пять массивов. Отличие первого оператора от остальных состоит в том, что в нем, фактически, описана только ссылка на массив, а память под элементы массива не выделена. Если список инициализации не задан, размерность может быть не только константой, но и выражением типа, приводимого к целому.

Работа с одномерным массивом

, г " д System;

-;-espace C o n s o l e A p p l i c a t i o n i

c l a s s Classl{

s t a t i c void MainO{

const i n t n = 6;

i n t [ ] a = new i n t [ n ] { 3, 12. 5. -9,

Console.WriteLineC "Исходный массив:");

f o r (i n t i = 0; i < n; ++i)

Console.WriteC " \ t " + a [ i ]);

Console.WriteLineC);

long sum = 0; // сумма отрицательных элементов

i n t num = 0; // количество отрицательных элементов

f o r С i n t i = 0; i < n; ++i)

i f (a [ i ] < 0){

sum += a [ i ];

++num;}

Console.WriteLineC "Сумма отрицательных = " + sum);

Console.WriteLineC "Кол-во отрицательных = " + num);

i n t max = a [ 0 ]; // максимальный элемент

f o r (i n t i = 1; i < n; ++i)

i f С a [ i ] > max) max = a [ i ];

Console.WriteLineC "Максимальный элемент = " + max);

Прямоугольный массив имеет более одного измерения. Чаще всего в программах

используются двумерные массивы. Варианты описания двумерного массива:

тип[,] имя;

тип[,] имя = new тип [ разм_1, разм_2 ];

тип[,] имя = { списокинициализаторов };

тип[,] имя = new тип [,] { списокинициализаторов };

тип[,] имя = new тип [ разм_1, разм_2 ] { списокинициализаторов };

Примеры описаний (один пример для каждого варианта описания):

i n t [, ] a; /II элементов нет

i n t [, ] b = new i n t [ 2. 3 ]; 111 элементы равны О

i n t [, ] с = { { 1, 2. 3 }. {4, 5. 6 } }; // 3 new подразумевается

i n t [, ] с = new i n t [. ] { { 1, 2, 3 }, {4, 5. 6 } }; // 4 размерность вычисляется

i n t [ J d = new i n t [ 2. 3 ] { { 1. 2. 3 }, {4. 5, 6 } }; / / 5 избыточное описание. Если список инициализации не задан, размерности могут быть не только константами,но и выражениями типа, приводимого к целому.

В ступенчатых массивах количество элементов в разных строках может различаться.

В памяти ступенчатый массив хранится иначе, чем прямоугольный: в виде нескольких внутренних массивов, каждый из которых имеет свой размер. выделяется отдельная область памяти для хранения ссылок на каждый из внутренних массивов.

Массив Ссылки

на строки О

О > а [ 0 ] 1]

а [ 1 ]

i [ l ] fo]

Под каждый из массивов, составляющих ступенчатый массив, память требуется

выделять явным образом, " п Ш П а = new i n t [ 3 ] [ ];

а [ 0 ] = new i n t [ 5 ];

а [ 1 ] = new i n t [ 3 ];

a [ 2 ] = new i n t [ 4 ];

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

// выделение памяти под 0-ю строку (5 элементов)

// выделение памяти под 1-ю строку (3 элемента)

// выделение памяти под 2-ю строку (4 элемента)

Здесь а [ 0 ], а [ 1 ] и а [ 2 ] — это отдельные массивы, к которым можно обращаться

по имени (пример приведен в следующем разделе). Другой способ выделения памяти:

\ i t [ ] [ ] а = { new i n t [ 5 ], new i n t [ 3 ], new i n t [ 4 ] };К элементу ступенчатого массива обращаются, указывая каждую размерность в своих квадратных скобках, например:

=: i ] [ 2 ] a [ i ] [ j ] a [ j ] [ i ] В остальном использование ступенчатых массивов не отличается от использования прямоугольных. Невыровненные массивы удобно применять, например, для

работы с треугольными матрицами большого объема.

Класс System.Array все массивы в С# построены на основе базового класса Array, который содержит полезные для программиста свойства и методы.

Length- Свойство Количество элементов массива (по всем размерностям)

Rank- Свойство Количество размерностей массива

BinarySearch- Статический метод Двоичный поиск в отсортированном массиве

Clear- Статический метод Присваивание элементам массива значений по умолчанию

Copy- Статический метод Копирование заданного диапазона элементов одного массива в другой массив

CopyTo- Метод Копирование всех элементов текущего одномерного массива в другой одномерный массив.GetValue Метод- Получение значения элемента массива. IndexOf -Статический метод Поиск первого вхождения элемента в одномерный массив

LastlndexOf- Статический метод Поиск последнего вхождения элемента в одномерный

Массив.Reverse - метод Изменение порядка следования элементов на обратный.

SetValue- Метод Установка значения элемента массива.Sort- Статический метод Упорядочивание элементов одномерного массива Свойство Length позволяет реализовывать алгоритмы, которые будут работать с массивами различной длины или, со ступенчатым массивом. Использование этого свойства исключает возможностьвыхода индекса за границы массива. Методы Sort, IndexOf и BinarySearch являются статическими, поэтому к ним обращаются через имя класса, а не экземпляра, и передают в них имя массива.

Оператор foreach применяется для перебора элементов в специальным образом организованной группе данных. Массив является именно такой группой. Удобство этого вида цикла заключается в том, что нам не требуется определять количество элементов в группе и выполнять их перебор по индексу: мы просто указываем на необходимость перебрать все элементы группы. Синтаксис оператора: foreach (тип имя in выражение) тело цикла. Имя задает локальную по отношению к циклу переменную, которая будет по очереди принимать все значения из массива выражение(применяется имя массива или другой группы данных).

пусть задан массив: i n t [ ] а = {24, 50, 18, 3, 16, -7, 9, -1 };Вывод этого массива на экран с помощью оператора foreach выглядит следующим образом:foreach (int х in а) Console.WriteLineC х); Этот оператор выполняется так: на каждом проходе цикла очередной элемент массива присваивается переменной х и с ней производятся действия, записанные

в теле цикла.

Массивы объектов При создании массива, состоящего из элементов ссылочного типа, память выделяется только под ссылки на элементы, а сами элементы необходимо разместить в хипе явным образом. В качестве примера создадим массив из объектов некоторого класса Monster: using System;

namespace ConsoleApplicationi{

class Monster {... }

class Classl

{ static void MainO{

Random rnd = new Random();

const int n = 5;

Monster[] stado = new Monster[n]: // 1

for (int i = 0; i < n; ++i) 112{

stado[i] = new Monster(rnd.Next(1, 100),

rnd.Next(1, 200),

"Crazy" + i.ToStringO):}

foreach (Monster x in stado) x.Passport(); // 3}}

Символы и строки. Символьный тип char предназначен для хранения символов в кодировке Unicode. Символьный тип относится к встроенным типам данных С# и соответствует стандартному классу Char библиотеки.NET из пространства имен System. В этом классе определены статические методы, позволяющие задать вид и категорию символа одной величины ссылочного типа, это может отразиться на другой (в данном случае,если изменить объект через ссылку с, объект b также изменит свое значение).

 

 

Тема 7. Иерархии классов

Управлять большим количеством разрозненных классов довольно сложно. С этой проблемой можно справиться путем упорядочивания и ранжирования классов, то есть объединяя общие для нескольких классов свойства в одном классе и используя его в качестве базового.Эту возможность предоставляет механизм наследования, который является мощнейшим инструментом ООП. Он позволяет строить иерархии, в которых классы- потомки получают свойства классов-предков и могут дополнять их или изменять. Таким образом, наследование обеспечивает важную возможность многократного использования кода. Написав и огладив код базового класса, можно, не изменяя его, за счет наследования приспособить класс для работы в различных ситуациях. Это экономит время разработки и повышает надежность программ.

Классы, расположенные ближе к началу иерархии, объединяют в себе общие черты для всех нижележащих классов. По мере продвижения вниз по иерархии классы приобретают все больше конкретных особенностей.

Итак, наследование применяется для следующих взаимосвязанных целей:

• исключения из программы повторяющихся фрагментов кода;

• упрощения модификации программы;

• упрощения создания новых программ на основе существующих.

Кроме того, наследование является единственной возможностью использовать объекты, исходный код которых недоступен, но в которые требуется внести изменения.

Наследование

Класс в С # может иметь произвольное количество потомков и только одного предка. При описании класса имя его предка записывается в заголовке класса после двоеточия. Если имя предка не указано, предком считается базовый класс всей иерархии System.Object:

[ атрибуты ] [ спецификаторы ] class имякласса [: предки ]

тело класса

П Р И М Е Ч А Н И Е

 

Обратите внимание на то, что слов о «предки» присутствует в описании класса во множественном числе, хотя класс может иметь только одного предка. Причина в том, что класс наряду с единственным предком может наследовать от интерфейсов — специального вида классов, не имеющих реализации.

Конструкторы не наследуются, поэтому производный класс должен иметь собственные конструкторы. Порядок вызова конструкторов определяется приведенными далее правилами:

• Если в конструкторе производного класса явный вызов конструктора базового класса отсутствует, автоматически вызывается конструктор базового класса без параметров. Это правило использовано в первом из конструкторов класса Daemon.

• Для иерархии, состоящей из нескольких уровней, конструкторы базовых классов вызываются, начиная с самого верхнего уровня. Посл е



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 365; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.47.253 (0.249 с.)