Главная страница
Навигация по странице:

  • Билет №21. Индексаторы классов

  • Билет №11. Массивы: многомерные и ступенчатые. Многомерные массивы

  • Билет №12. Символьный тип char, неизменяемы строки string и изменяемые строки StringBuider. Символы и строки

  • Неизменяемые строки string

  • Билет №13. Методы: основные понятия. Перегрузка методов.

  • Билет №16. Работа с файловой системой: классы Directory и Fi1е и классы DirectoryInfo и FileInfo.

  • Работа с каталогами Абстрактный класс FileSystemInfo

  • Работа с файлами Класс Filelnfo

  • Билет №14. Обработка исключений: операторы try, checked и unchecked. Генерация собственных исключений.

  • Операторы checked и unchecked

  • шпоргалка исис. Билет 1. Платформа Microsoft. Net Framework 0


    Скачать 0.77 Mb.
    НазваниеБилет 1. Платформа Microsoft. Net Framework 0
    Анкоршпоргалка исис.pdf
    Дата29.07.2018
    Размер0.77 Mb.
    Формат файлаpdf
    Имя файлашпоргалка исис.pdf
    ТипДокументы
    #22205
    страница3 из 7
    1   2   3   4   5   6   7
    Билет №10. Массивы: одномерные.
    Массивнабор элементов одного и того же типа, объединенных общим именем.
    Массивы в С# можно использовать по аналогии с тем, как они используются в других языках программирования.
    Однако С#-массивы имеют существенные отличия: они относятся к ссылочным типам данных, более того - реализованы как объекты. Фактически имя массива является ссылкой на область кучи (динамической памяти), в которой последовательно размещается набор элементов определенного типа. Выделение памяти под элементы происходит на этапе инициализации массива. А за освобождением памяти следит система сборки мусора - неиспользуемые массивы автоматически утилизируются данной системой.
    Одномерные массивы
    Одномерный массив – это фиксированное количество элементов одного и того же типа, объединенных общим именем, где каждый элемент имеет свой номер. Нумерация элементов массива в С# начинается с нуля, то есть, если массив состоит из 10 элементов, то его элементы будут иметь следующие номера:
    0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
    Одномерный массив в С# реализуется как объект, по этому его создание представляет собой двухступенчатый процесс. Сначала объявляется ссылочная переменная на массив, затем выделяется память под требуемое количество элементов базового типа, и ссылочной переменной присваивается адрес нулевого элемента в массиве. Базовый тип определяет тип данных каждого элемента массива. Количество элементов, которые будут храниться в массиве, определяется размер массива.
    Объявление: базовый_тип [] имя__массива; Например: int [] a; базовый_тип [] имя__массива = new базовый_тип [размер]; Например: int []a=new int [10]; базовый_тип [] имя__массива={список инициализации}; Например: int []a={0, 1, 2, 3};
    Обращения к элементам массива происходи с помощью индекса, для этого нужно указать имя массива и в квадратных скобках его номер. Например, a[0], b[10], c[i].
    Так как массив представляет собой набор элементов, объединенных общим именем, то обработка массива обычно производится в цикле.
    Билет №21. Индексаторы классов
    Индексаторы
    Индексатор представляет собой разновидность свойства и обычно применяется для организации доступа к скрытым полям класса по индексу, например, так же, как мы обращаемся к элементу массива. Синтаксис индексатора аналогичен синтаксису свойства:
    [атрибуты] [спецификаторы] тип this [список параметров]
    // последние [ ] являются элементами синтаксиса
    {
    [get код_доступа]
    [set код_доступа]
    }
    Спецификаторы аналогичны спецификаторам свойств и методов. Индексаторы чаще всего объявляются со спецификатором public, поскольку они входят в интерфейс объекта. Атрибуты и спецификаторы могут отсутствовать.
    Код доступа представляет собой блоки операторов, которые выполняются при получении (get) или установке (set) значения некоторого элемента класса. Может отсутствовать либо часть get, либо set, но не обе одновременно. Если отсутствует часть set, индексатор доступен только для чтения, если отсутствует часть get, индексатор доступен только для записи.
    Список параметров содержит одно или несколько описаний индексов, по которым выполняется доступ к элементу. Чаще всего используется один индекс целого типа.

    Билет №11. Массивы: многомерные и ступенчатые.
    Многомерные массивы
    Многомерные массивы имеют более одного измерения. Чаще всего используются двумерные массивы, которые представляют собой таблицы. Каждый элемент массива имеет два индекса, первый определяет номер строки, второй – номер столбца, на пересечении которых находится элемент. Нумерация строк и столбцов начинается с нуля.
    Объявить двумерный массив можно одним из предложенных способов: тип [,] имя__массива; тип [,] имя__массива = new тип [размер1, размер2]; тип [,] имя__массива={{элементы 1-ой строки}, … , {элементы n-ой строки}}; тип [,] имя__массива= new тип [,]{{элементы 1-ой строки}, … ,{элементы n-ой строки}}; строки}};
    Ступенчатые массивы
    В ступенчатых массивах количество элементов в разных строках может быть различным. В памяти ступенчатый массив хранится в виде массива массивов. Структура ступенчатого массива:
    Массив a a
    [
    0
    ] a[0][0
    ] a[0][1
    ]
    … a
    [
    1
    ]
    … a[1][0
    ] a[1][1
    ]
    … a
    [
    n
    ] a[n][0
    ] a[n][1
    ]

    Объявление ступенчатого массива: тип [][] имя_массива;
    Например: int [][]a;
    Фактически мы объявили одномерный массив ссылок на целочисленные одномерные массивы. При таком описании потребуется не только выделять память под одномерный массив ссылок, но и под каждый из целочисленных одномерных массивов. Такое распределение памяти позволяет определять произвольную длину каждой строки массива (отсюда и произошло название массива – ступенчатый). Например: int [][] a= new int [3][];
    // Создаем три строки a[0]=new int [2];
    // 0-ая строка ссылается на 2-х элементый одномерный массив a[1]=new int [3];
    // 1-ая строка ссылается на 3-х элементый одномерный массив a[2]=new int [10];
    // 2-ая строка ссылается на 10-х элементый одномерный массив
    Другой способ выделения памяти: int [][] a= {new int [2], new int [3], new int [10]};
    Так как каждая строка ступенчатого массива фактически является одномерным массивом, то с каждой строкой можно работать как с экземпляром класса Array. Это является преимуществом ступенчатых массивов перед двумерными массивами.
    Билет №12. Символьный тип char, неизменяемы строки string и изменяемые строки StringBuider.
    Символы и строки
    Обработка текстовой информации является одной из самых распространенных задач современного программировании. С# предоставляет для ее решения широкий набор средств: символы char, неизменяемые строки string, изменяемые строки StringBuider и регулярные выражения Regex.
    Символы char
    Символьный тип char предназначен для хранения символа в кодировке Unicode. Символьный тип относится к встроенным типам данных С# и соответствует стандартному классу Сhar библиотеки .Net из пространства имен
    System
    Неизменяемые строки string
    Тип string, предназначенный для работы со стоками символов в кодировке Unicode, является встроенным типом С#. Ему соответствует базовый тип класса System.String библиотеки .Net. Каждый объект string - это неизменяемая последовательность символов Unicode, т.е. методы, предназначенные для изменения строк, возвращают измененные копии, исходные же строки остаются неизменными.
    Создать строку можно несколькими способами:
    1)
    string s;
    // инициализация отложена
    2)
    string s=''кол около колокола'';
    //инициализация строковым литералом
    3)
    string s=@''Привет!
    //символ
    @ сообщает конструктору string, что строку
    Сегодня хорошая погода!!! ''
    // нужно воспринимать буквально, даже если она занимает
    /
    4)
    string s=new string (' ', 20);
    //конструктор создает строку из 20 пробелов
    5)
    int x = 12344556;
    //инициализировали целочисленную переменную string s = x.ToString();
    //преобразовали ее к типу string
    6)
    char [] a={'a', 'b', 'c', 'd', 'e'};
    //создали массив символов string v=new string (a);
    // создание строки из массива символов
    7)
    char [] a={'a', 'b', 'c', 'd', 'e'};
    //создание строки из части массива символов, при этом: 0 string v=new string (a, 0, 2)
    // показывает с какого символа, 2 – сколько символов
    При работе с объектами класса string нужно учитывать их свойство неизменяемости, т.е. тот факт, что методы изменяют не сами строки, а их копии.
    Боротся с таким засорением придется сборщику мусора, что будет сказываться на производительности программы. Поэтому если нужно изменять строку, то лучше пользоваться классом StringBuilder.
    Изменяемые строки
    Чтобы создать строку, которую можно изменять, в С# предусмотрен класс StringBuilder, определенный в пространстве имен System.Text. Объекты этого класса всегда объявляются с явным вызовом конструктора класса (через операцию new) . Примеры создания изменяемых строк:
    StringBuilder a =new StringBuilder(); //создание пустой строки, размер по умолчанию 16 символов
    //инициализация строки и выделение необходимой памяти
    StringBuilder b = new StringBuilder("abcd");
    //создание пустой строки и выделение памяти под 100 символов
    StringBuilder с = new StringBuilder(100);
    //инициализация строки и выделение памяти под 100 символов
    StringBuilder d = new StringBuilder("abcd", 100);
    //инициализация подстрокой "bcd", и выделение памяти под 100 символов
    StringBuilder d = new StringBuilder("abcd", 1, 3,100);
    Билет №13. Методы: основные понятия. Перегрузка методов.
    Методы: основные понятия
    Метод – это функциональный элемент класса, который реализует вычисления или другие действия, выполняемые классом или его экземпляром (объектом). Метод представляет собой законченный фрагмент кода, к которому можно обратиться по имени. Он описывается один раз, а вызываться может многократно. Совокупность методов класса определяет, что конкретно может делать класс. Например, стандартный класс Math содержит методы, которые позволяют вычислять значения математический функций.
    Синтаксис метода:
    [атрибуты] [спецификторы] тип_возвращаемого_результаты имя_метода ([список_параметров])
    { тело_метода; return значение
    } где:
    1) Атрибуты и спецификторы являются необязательными элементами синтаксиса описания метода. На данном этапе атрибуты нами использоваться не будут, а из всех спецификаторов мы в обязательном порядке будем использовать спецификатор static, который позволит обращатся к методу класса без создания его экземпляра
    2) Тип_возвращаемого_результата определяет тип значения, возвращаемого методом. Это может быть любой тип, включая типы классов, создаваемые программистом. Если метод не возвращает никакого значения, необходимо указать тип void (в этом случае в теле метода отсутсвует оператор return).
    3) Имя_метода – идентификатор, заданный программистом с учетом требований накладываемыми на идентификаторы в С#, отличный от тех, которые уже использованы для других элементов программы в пределах текущей области видимости.
    4) Список_параметров представляет собой последовательность пар, состоящих из типа данных и идентификатора, разделенных запятыми. Параметры — это переменные или константы, которые получают значения, передаваемые методу при вызове. Если метод не имеет параметров, то список_параметров остается пустым.
    5) Значение определяет значение, возвращаемое методом. Тип значения должен соответствовать
    типу_возвращаемого_результата или приводится к нему.
    При передаче параметра по значению метод получает копии параметров, и операторы метода работают с этими копиями. Доступа к исходным значениям параметров у метода нет, а, следовательно, нет и возможности их изменить.
    При передаче параметров по ссылке метод получает копии адресов параметров, что позволяет осуществлять доступ к ячейкам памяти по этим адресам и изменять исходные значения параметров.
    Для того чтобы параметр передавался по ссылке, необходимо при описании метода перед формальным параметром и при вызове метода перед соответствующим фактическим параметром поставить служебное слово
    ref.
    Передача параметра по ссылке требует, чтобы аргумент был инициализирован до вызова метода (см. строку 1). Если в этой строке не проводить инициализацию переменных, то компилятор выдаст сообщение об ошибке.
    Однако в некоторых случаях бывает невозможно инициализировать параметр до вызова метода. Тогда параметр следует передавать как выходной, используя спецификатор out.
    Перегрузка методов
    Иногда бывает удобно, чтобы методы, реализующие один и тот же алгоритм для различных типов данных, имели одно и то же имя. Использование нескольких методов с одним и тем же именем, но различными типами и количеством параметров называется перегрузкой методов. Компилятор определяет, какой именно метод требуется вызвать, по типу и количеству фактических параметров.
    Перегрузка методов является проявлением полиморфизма, одного из основных свойств ООП.
    Программисту гораздо удобнее помнить одно имя метода и использовать его для работы с различными типами данных, а решение о том, какой вариант метода вызвать, возложить на компилятор. Этот принцип широко используется в классах библиотеки .NET.
    Например, в стандартном классе Console метод WriteLine перегружен 19 раз для вывода величин разных типов.
    Билет №16. Работа с файловой системой: классы Directory и Fi1е и классы DirectoryInfo и FileInfo.
    Работа с файловой системой
    В пространстве имен System.IO предусмотрено четыре класса, которые предназначены для работы с файловой системой компьютера, т.е для создания, удаления переноса и т.д. файлов и каталогов.
    Первые два типа — Directory и Fi1е реализуют свои возможности с помощью статических методов, поэтому данные классы можно использовать без создания соответствующих объектов
    (экземпляров классов).
    Следующие типы – DirectoryInfo и FileInfo обладают схожими функциональными возможностями c Directory и Fi1е, но порождены от класса FileSystemInfo и поэтому реализуются путем создания соответствующих экземпляров классов.
    Работа с каталогами
    Абстрактный класс FileSystemInfo
    Значительная часть членов FileSystemInfo предназначена для работы с общими характеристиками файла или каталога (метками времени, атрибутами и т. п.).
    В FileSystemInfo предусмотрено и несколько методов. Например, метод Delete() - позволяет удалить объект файловой системы с жесткого диска, a Refresh() — обновить информацию об объекте файловой системы
    Класс DirectoryInfo
    Данный класс наследует члены класса FileSystemInfo и содержит дополнительный набор членов, которые предназначены для создания, перемещения, удаления, получения информации о каталогах и подкаталогах в файловой системе.
    Работа с типом DirectoryInfo начинается с того, что мы создаем экземпляр класса (объект), указывая при вызове конструктора в качестве параметра путь к нужному каталогу. Если мы хотим обратиться к текущему каталогу (то есть каталогу, в котором в настоящее время производится выполнение приложения), вместо параметра используется обозначение ".".
    Класс Directory
    Работать с каталогами файловой системы компьютера можно и при помощи класса
    Directory, функциональные возможности которого во многом совпадают с возможностями DirectoryInfo. Но члены данного класса реализованы статически, поэтому для их использования нет необходимости создавать объект.
    Работа с файлами
    Класс Filelnfo
    Класс Filelnfo предназначен для организации доступа к физическому файлу, который содержится на жестком диске компьютера. Он позволяет получать информацию об этом файле (например, о времени его создания, размере, атрибутах и т. п.), а также производить различные операции, например, по созданию файла или его удалению.
    Класс FileInfo наследует члены класса FileSystemInfo и содержит дополнительный набор членов,
    Как мы видим, большинство методов FileInfo возвращает объекты (FIleStream, StreamWriter, StreamReader и т. п.), которые позволяют различным образом взаимодействовать с файлом, например, производить чтение или запись в него.
    Класс File
    Доступ к физическим файлам можно получать и через статические методы класса File.
    Большинство методов объекта Fileinfo представляют в этом смысле зеркальное отражение методов объекта File.
    Билет №14. Обработка исключений: операторы try, checked и unchecked. Генерация собственных исключений.
    Язык С#, как и многие другие объектно-ориентированные языки, реагирует на ошибки и ненормальные ситуации с помощью механизма обработки исключений. Исключение - это объект, генерирующий информацию о «необычном программном происшествии». При этом важно проводить различие между ошибкой в программе, ошибочной ситуацией и исключительной ситуаций.
    Ошибка в программе допускается программистом при ее разработке
    Ошибочная ситуация вызвана действиями пользователя
    Даже если программист исправил все свои ошибки в программе, предвидел все ошибочные ситуации, он все равно может столкнуться с непредсказуемыми и неотвратимыми проблемами -
    исключительными ситуациями.
    Для обработки ошибочных и исключительных ситуаций в С# используется специальная подсистема обработки исключений. Преимущество данной подсистемы состоит в автоматизации создания большей части кода по обработке исключений. Раньше этот код приходилось вводить в программу "вручную". Кроме этого обработчик исключений способен распознавать и выдавать информацию о таких стандартных исключениях, как деление на нуль или попадание вне диапазона определения индекса.
    Оператор try
    В С# исключения представляются классами. Все классы исключений порождены от встроенного класса исключений Exception, который определен в пространстве имен System.
    Управление обработкой исключений основывается на использовании оператора try.
    Синтаксис оператора: try
    // контролируемый блок
    {

    } catch //один или несколько блоков обработки исключений
    {

    } finally
    //блок завершения
    {

    }
    Программные инструкции, которые нужно проконтролировать на предмет исключений, помещаются в блок try.
    Если исключение возникает в этом блоке, оно дает знать о себе выбросом определенного рода информации.
    Выброшенная информация может быть перехвачена и обработана соответствующим образом с помощью блока
    catch. Любой код, который должен быть обязательно выполнен при выходе из блока try, помещается в блок finally.
    Операторы checked и unchecked
    В С# предусмотрено специальное средство, которое связано с генерированием исключений, вызванных переполнением результата в арифметических вычислениях. Например, когда значение арифметического выражения выходит за пределы диапазона, определенного для типа данных выражения.
    Для управления подобными исключениями в С# используются операторы checked и unchecked. Чтобы указать, что некоторое выражение должно быть проконтролировано на предмет переполнения, используйте ключевое слово checked. А чтобы проигнорировать переполнение, используйте ключевое слово unchecked. В последнем случае результат будет усечен так, чтобы его тип соответствовал типу-результату выражения.
    Оператор checked имеет две формы:
    1)
    проверяет конкретное выражение и называется операторной checked-формой
    checked ((тип-выражения) expr) где expr — выражение, значение которого необходимо контролировать. Если значение контролируемого выражения переполнилось, генерируется исключение типа OverflowException.
    2)
    проверяет блок инструкций checked
    {
    // Инструкции, подлежащие проверке.
    }
    Оператор unchecked также имеет две формы:
    1) операторная форма, которая позволяет игнорировать переполнение для заданного выражения unchecked ((тип-выражения) expr) где ехрr — выражение, которое не проверяется на предмет переполнения. В случае переполнения это выражение усекается.
    2) игнорирует переполнение, которое возможно в блоке инструкций unchecked
    {
    // Инструкции, для которых переполнение игнорируется.
    }
    1   2   3   4   5   6   7


    написать администратору сайта