Как в любом языке программирования, в С# существует множество встроенных типов данных. С помощью этих типов можно представлять целочисленные числа и числа с плавающей запятой, строки символов и логические значения. Все типы в С# разделяются на две основные разновидности: структурные типы (value-based) и ссылочные типы (reference-based). К структурными типам относятся все числовые типы данных (int, float и пр.), а также перечисления и структуры. Память для структурных типов выделяется из стека. При присвоении одного структурного типа другому присваивается не сам тип (как область в памяти), а его побитовая копия. Ссылочные типы (классы и интерфейсы) ведут себя совершенно по-другому. Память для них выделяется не в стеке, а в области управляемой кучи. При копировании ссылочного типа создается еще одна ссылка, которая указывает на ту же область оперативной памяти.
13.Преобразование типов.
Приведение типа (typeconversion) — преобразование значения переменной одного типа в значение другого типа. Выделяют явное и неявное приведения типов.При явном приведении указывается тип переменной, к которому необходимо преобразовать исходную переменную.При неявном приведении преобразование происходит автоматически, по правилам, заложенным в данном языке программирования.Также в языке могут быть заданы специальные функции для приведения. А)Неявное приведениеСамо приведение происходит как во время присваивания значения переменной, так и при операциях сравнения, вычисления выражения. При использовании в выражении несколько различных типов значения одного или нескольких подтипов может быть осуществлено преобразование к более общему типу (супертипу), с большим диапазоном возможных значений.б)Явное приведение типа. Преобразование встроенных типовОбъекты одного типа могут быть преобразованы в объекты другого типа неявно или явно. Неявные преобразования происходят автоматически, компилятор делает это вместо вас. Явные преобразования осуществляются, когда вы «приводите» значение к другому типу. Неявные преобразования гарантируют также, что данные не будут потеряны.
14.Функциональные возможности класса System.Object. Корневой класс System.Object всей иерархии объектов.NET, называемый в С# object, обеспечивает всех наследников несколькими важными методами. Производные классы могут использовать эти методы непосредственно или переопределять их. Класс object часто используется и непосредственно при описании типа параметров методов для придания им общности, а также для хранения ссылок на объекты различного типа — таким образом реализуется полиморфизм.
Открытые методы класса System.Object перечислены ниже.
• Метод Equals с одним параметром возвращает значение true, если параметр и вызывающий объект ссылаются на одну и ту же область памяти. Синтаксис: public virtual bool Equals(object obj);
• Метод Equals с двумя параметрами возвращает значение true, если оба параметра ссылаются на одну и ту же область памяти. Синтаксис:
public static bool Equals(object obi, object ob2);
• Метод GetHashCode формирует хеш-код объекта и возвращает число, однозначно идентифицирующее объект. Это число используется в различных структурах и алгоритмах библиотеки. Если переопределяется метод Equals, необходимо перегрузить и метод GetHashCode. Подробнее о хеш-кодах рассказывается в разделе «Абстрактные структуры данных» Синтаксис: public virtual int GetHashCodeO;
• Метод GetType возвращает текущий полиморфный тип объекта, то есть не тип ссылки, а тип объекта, на который она в данный момент указывает. Возвращаемое значение имеет тип Туре. Это абстрактный базовый класс иерархии, использующийся для получения информации о типах во время выполнения1. Синтаксис: public Type Get Туре О;
• Метод ReferenceEquals возвращает значение true, если оба параметра ссылаются на одну и ту же область памяти. Синтаксис : public static bool(object obi, object ob2);
• Метод ToString по умолчанию возвращает для ссылочных типов полное имя класса в виде строки, а для значимых — значение величины, преобразованное в строку. Этот метод переопределяют для ого, чтобы можно было выводить информацию о состоянии объекта. Синтаксис: public virtual string ToStringO
Операторы выбора
Операторы ветвления if и switch применяются для тою чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов. Оператор if обеспечивает передачу управления на одну из двух ветвей ычислений, а оператор switch — на одну из произвольного чиста ветвей.
Условный оператор if Условный оператор if используется для разветвления процесса вычислений па два направления
Формат оператора: if (логическоевыражение) оператор_1; [ else оператора; ]
Оператор s w i t c h (переключатель) предназначен для разветвления процесса вычислений на несколько направлений.
Формат оператора:
switch С выражение){
case константное_выражение_1: [ список_операторов_1 ]
case константное_выражение_2: [ список_операторов_2 ]
case константноевыражениеп: [ списокоператоровп ]
[ default: операторы ]
Оператор switch предпочтительнее оператора if в тех случаях, когда в программе требуется разветвить вычисления на количество направлений большее двух и выражение, по значению которого производится переход на ту или иную ветвь, не является вещественным. Часто это справедливо даже для двух ветвей, поскольку повышает наглядность программы.
Циклические операторы.
С# включает достаточно большой набор циклических операторов, таких как for, while, do...while, а также цикл с перебором каждого элемента foreach. Кроме того, С# поддерживает операторы перехода и возврата, например goto, break, continue и return.1) Оператор goto был основой для реализации других операторов цикла. Но он был и базой многократных переходов, вследствие чего возникла запутанность кода программы. Поэтому опытные программисты стараются его не использовать. 2) Эта циклическая инструкция работает по принципу: «Пока выполняется условие — происходит работа». Если результатом проверки условия является истина, то выполняется блок инструкций, в противном случае в результате выполнения программы while игнорируется.3) Бывают случаи, когда цикл while не совсем удовлетворяет вашим требованиям. Например, вы хотите проверять условие не в начале, а в конце цикла. В таком случае лучше использовать цикл do...while.. Разница состоит в том, что цикл do...while выполняется всегда минимум один раз, до того как произойдет проверка условия выражения. 4) Цикл for позволяет вам объединить все операции в одной инструкции.5) Цикл foreach используется для перебора массивов и объединений (collection) по элементам.6) break и continue Бывают ситуации, когда необходимо прекратить выполнение цикла досрочно или при каком то условии не выполнять описанные в теле цикла инструкции, не прерывая при этом цикла. Для этого удобно использовать инструкции break и continue. Если вы хотите на каком-то шаге цикла его прекратить, не обязательно выполняя до конца описанные в нем действия, то лучше всего использовать break.
Обработка исключений
Исключительная ситуация, или исключение, — это возникновение аварийного события, которое может порождаться некорректным использованием аппаратуры пли неправильной работой программы, например делением на ноль или переполнением. Обычно эти события приводят к завершению программы с системным сообщением об ошибке. С# дает программисту возможность восстановить работоспособность программы и продолжить ее выполнение. Как правило программист в своем проекте не может предсказать все действия пользователя, входные значения и многие другие параметры. А чем крупнее и серьезнее проект тем таких мест в приложении становится все больше и больше, поэтому перед программистом встает задача отловить и по возможность обработать все возможные ситуации неправильного выполнения код. Любое действие которое не может быть выполнено по той или иной причине называется исключение. Для этого в C# есть конструкция try.. catch. Оператор try содержит три части:
• контролируемый блок — составной оператор, предваряемый ключевым словомtry. В контролируемый блок включаются потенциально опасные операторыпрограммы. Все функции, прямо или косвенно вызываемые из блока, такжесчитаются ему принадлежащими;
• один или несколько обработчиков исключений — блоков catch, в которых описывается,как обрабатываются ошибки различных типов;
• блок завершения finally выполняется независимо от того, возникла ошибкав контролируемом блоке или нет. Синтаксис оператора try:
try блок [ блоки catch ] [ блок finally ]
Перегрузка методов.
ПерегрузкаЧасто бывает что выполняется одно и тоже действие (метод) но с разными типами аргументов или их количества.
В некторых языках программирования что бы решить данную проблему приходилось описать все методы с новыми именами, в Си Шарп для этого есть перегрузка. Рассмотри следующий пример: нам необходимо написать метод вычисляющий сумму чисел переданных в параметре, но мы можем передать как два параметра так и три и они могут быть либо все int либо все double Создаем 4 варианта метода Add со всему возможными параметрами.
При выполнении компилятор сам подберет наиболее подходящий метод