
- •Вопрос 1. Общее понятие ооп
- •Вопрос 2. Классы, объекты, абстрагирование
- •Вопрос 3. Полиморфизм, инкапсуляция, наследование
- •Вопрос4. История развития и базовый синтаксис с#
- •Вопрос 5. Основные черты языка с#
- •Вопрос 6. Система типов с#
- •Вопрос 7. Литералы, переменные, константы, перечисления Литералы. Представление значений
- •Переменные элементарных типов. Объявление и инициализация
- •Константы
- •Перечисления
- •Вопрос 8. Операции и выражения
- •Приоритет операций
- •Вопрос 9. Приведение типов
- •Вопрос 10 Контроль за перевыполнением
- •Вопрос 11 Процедурные и функциональные методы в с#
- •Вопрос 11 Создание и уничтожение объектов
- •Модификатор static и объект this Кроме выше рассмотренных модификаторов доступа (public,protected…) в языке c# существует еще ряд модификаторов. Один из них – модификатор static.
- •Уничтожение объектов в управляемой памяти. Деструктор
- •Вопрос 13 Параметризованные классы и индексаторы
- •Параметризованные классы – классы, позволяющие определить тип своих аргументов при непосредственном создании объектов.
- •Вопрос 14 управляющие операторы
- •Вопрос 15 массивы
- •Вопрос 16 перегрузка операций
- •Вопрос 17 Наследование. Конструкторы базового и производного классов
- •Вопрос 18 Переопределение членов базового класса:new модификатор
- •Вопрос 19 Прекращение наследования: sealed-спецификатор
- •Вопрос 20 Абстрактные функции и абстрактные классы
- •Вопрос 21 Операции is и as
- •Вопрос 22 Ввод и вывод данных с#
- •Потоки: байтовые, символьные, двоичные
- •Консольный ввод/вывод. Функции – члены класса Console
- •Консольный вывод. Форматирование
- •Нестандартное (custom) форматирование значений
- •Консольный ввод. Преобразование значений
Вопрос4. История развития и базовый синтаксис с#
История основной ветви языков программирования, которая привела к появлению C#, восходит к 60-м годам, а именно, ко времени возникновения языка B, который был придуман в 1963 году. Основной целью разработки языка была реализация операционной системы UNIX.
Следующим шагом в "алфавите" языков программирования, ведущем к языку C#, стал язык C, который был изобретен на основе языка B в 1972 году. В варианте C язык B расширился за счет явного использования типов, структур и ряда новых операций.
В 1984 году появился проект языка С++ – ООП-расширения языка C, в котором вводилось понятие класса как объекта данных.
Наконец, уже в 2000 году, то есть более чем через 15 лет, корпорация Microsoft выпустила в свет C++ нового поколения под названием C# ("Си шарп"), основным постулатом которого является высказывание: "всякая сущность есть объект". Язык основан на строгой компонентной архитектуре и реализует передовые механизмы обеспечения безопасности кода.
Язык программирования C# объединил лучшие черты целого ряда предшественников. Кроме упомянутой ветви языков B-C-C++, необходимо указать еще несколько знаковых для настоящего времени языков программирования, а именно, Java и Visual Basic.
Базовый синтаксис языка C#
Программа на языке C#– правильно построенная (не вызывающая возражений со стороны C#-компилятора) последовательность предложений, на основе которой формируется сборка. В общем случае, программист создает файл, содержащий объявления пространств имен и объявление классов. Этот файл подается на вход компилятору. Результат компиляции представляется транслятором в виде сборки. В принципе сборка может быть двух видов (здесь все зависит от замысла разработчика кода):
Portable Executable File (PE-файл с расширением .exe), пригоден к непосредственному исполнению CLR.
Dynamic Link Library File (DLL-файл с расширением .dll), предназначен для повторного использования как компонент в составе какого-либо приложения.
Структура программы может быть представлена следующей схемой:
Пространство имен(namespace) – средство логической группировки классов программы.
Пример. Допустим, мы пишем программу для какого-либо магазина. Там необходимо будет вести учет товара, фиксировать оплаты от клиентов и работать с поставщиками. Логично будет классы, работающие с товарами объединить в одно пространство имен, с покупателями в другое, с поставщиками в третье. Тогда, даже если функции какого-либо типа разобьются по нескольким файлам, мы будем знать, к какому типу они относятся. Или наоборот, если внутри одного файла будут функции нескольких типов, то по пространствам имен мы их разделим.
Пространство имен объявляется следующим образом:
Namespace <Имя пространства имен>{ <Объявления классов> }
Внутри пространства имен к объявленному в нем классу мы можем обращаться просто по имени. Если же мы вызываем класс, определенный в другом пространстве имен, то обращаться к нему мы должны так: <Имя пространства имен>.<Имя класса>. средством, которое позволяет сокращать имена классов, является оператор
using <ИмяПространстваИмен>;
Классы и структуры - являются программно определяемыми типами, которые позволяют определять (создавать) новые типы, специально приспособленные для решения конкретных задач. В рамках объявления класса и структуры описывается множество переменных различных типов (набор данных — членов класса), правила порождения объектов — представителей структур и классов, их основные свойства и методы. В программе класс объявляется с помощью специальной синтаксической конструкции, которая называется объявлением класса. Фактически, объявление структур и классов является основным элементом любой C# программы. В программе нет ничего, кроме объявлений и конструкций, облегчающих процедуру объявления.
С точки зрения синтаксиса, между объявлениями классов и структур существуют незначительные различия (ключевые слова struct и class, в структуре не допускается объявлений членов класса со спецификаторами доступа protected и protected internal, при объявлении структуры не допускается объявление конструктора без параметров), часть из которых будет рассмотрены далее. Основное их различие состоит в том, что класс и структура принадлежат к двум различным категориям типов – типов-ссылок и типов-значений. Рассмотрим основные правила объявления классов.
Объявление класса состоит из нескольких элементов:
Объявление атрибутов – необязательный элемент объявления.
Модификаторы (в том числе модификаторы прав доступа) – необязательный элемент объявления.
Partial (спецификатор разделения объявления класса) – необязательный элемент объявления.
Class (struct для структуры).
Имя класса.
Имена предков (класса и интерфейсов) – необязательный элемент объявления.
Тело класса (структуры).
Атрибуты – средство добавления ДЕКЛАРАТИВНОЙ (вспомогательной) информации к элементам программного кода. Назначение атрибутов: организация взаимодействия между программными модулями, дополнительная информация об условиях выполнения кода, управление сериализацией (правила сохранения информации), отладка и многое другое. Атрибуты добавляют в программу метаданные. Метаданные — это сведения, встроенные в программу, например инструкции компилятора или описания данных. Это информация, которая описывает каждый элемент, управляемый общеязыковой средой выполнения: сборку, загружаемый файл, тип, метод и т. д. Метаданные могут включать сведения, необходимые для отладки и сборки мусора, а также атрибуты безопасности, расширенные определения классов и членов, сведения о привязке версий и другую информацию, которая требуется среде выполнения. Метаданные сборки содержит манифест сборки. Это неотъемлемая часть каждой сборки, предоставляющая собственное ее описание. Манифест определяет удостоверение сборки; указывает файлы, реализующие сборку; указывает типы и ресурсы, образующие сборку; поэлементно расписывает зависимости времени компиляции от других сборок; указывает набор разрешений, необходимых для правильного выполнения сборки. Эти сведения используются во время выполнения для разрешения ссылок, применения политики привязки версий и проверки целостности загруженных сборок. Благодаря наличию у сборок собственных описаний становятся возможными установка без влияния на окружение и развертывание методом XCOPY.
Наример, [System.Serializable]. Если мы используем этот атрибут при определении класса, то объекты данного класса смогут в последствии быть сериализованы. Под сериализацией понимают процесс сохранения объектов в долговременной памяти(в файлах) в процессе создания системы. То есть мы можем возвращаться к какой-либо созданной ранее версии объекта.
Модификаторы прав доступа обеспечивают реализацию принципа инкапсуляции, используются при объявлении классов, структур и их составляющих компонентов. Представлены следующими значениями:
public |
Обозначение для общедоступных членов класса. К ним можно обратиться из любого метода любого класса программы |
protected |
Обозначение для членов класса, доступных в рамках объявляемого класса и из методов производных классов |
internal |
Обозначение для членов класса, которые доступны из методов классов, объявляемых в рамках сборки, где содержится объявление данного класса |
protected internal |
Обозначение для членов класса, доступных в рамках объявляемого класса, из методов производных классов, а также доступных из методов классов, которые объявлены в рамках сборки, содержащей объявление данного класса |
private |
Обозначение для членов класса, доступных в рамках объявляемого класса |
Спецификатор разделения объявления класса partial позволяет разбивать код объявления класса на несколько частей, каждая из которых размещается в собственном файле. Если объявление класса занимает большое количество строк, его размещение по нескольким файлам может существенно облегчить работу над программным кодом, его документирование и модификацию. Транслятор способен восстановить полное объявление класса. Спецификатор partial может быть использован при объявлении классов, структур и интерфейсов.
Сочетание ключевого слова class (struct, interface) и имени объявляемого класса (структуры или интерфейса) задает имя типа.
Конструкции вида:
:имя класса (при объявлении класса)
:список имен интерфейсов (при объявлении структуры или класса)
:имя класса, список имен интерфейсов (при объявлении класса)
с обязательным разделителем ':' обеспечивают реализацию принципа наследования и будут обсуждаться позже. В C# класс может наследоваться только от одного класса и нескольких интерфейсов.
Тело класса в объявлении ограничивается парой разделителей '{', '}', между которыми располагаются объявления данных — членов и методов класса.
Пример Пример
Public class MyClass
{ int Y; }
Каждая программа на языке C# должна иметь точку входа, причем, только одну. Эта точка определяется следующей конструкцией:
static void Main(string[] args)