Модель выполнения приложения в среде .NetFramework. Промежуточныйязык Microsoft (Microsoft Intermediate Language, MSIL). Сборки

Эволюция языков прогр-я.

Велики требования к языкам прогр-я. Языков прогр-я существует много. Языки прогр-я связаны др. с др. Средства из одного языка адаптируются др. языком ,отжившие конструкции отбрасываются. Internet и появление языка Java.Java – это структурный объектно-ориентированный язык программирования, синтаксис и основные принципы – объектная модель – взяты из С++. Программы предназн. для выполнения с использованием опред.пр-сса и под управлением конкр. Операц. системы. Проблема переносимости программ из одной среды в другую не решалась. Для ее решения понадобился новый язык программ-я - Java. Исходным импульсом для возникновения Java стала потребность в не зависящем от платформы языке ,кот. можно было бы использовать при разработке программного обеспечения для встроенных контроллеров (в бытовые устройства).

В Java переносимость достигается посредством преобразования исходного кода программы в промежуточный код, именуемый байт-кодом.Байт-код выполняется машиной Java (JavaVirtualMachine – JVM) – спец. Операц. системой. Использование для выполнения Java – программы промежуточного языка было элегантным и рентабельным решением. Создание С#.Не решили – межязыковая возм-сть взаимод-я прогр. и аппаратных изделий разных поставщиков, или многоязыковое прогр-ние.Программы, напис. на разных языках, должны работать одна с другой для: 1. создания больших систем с распределенным ПО, 2. программирования компонентов ПО, кот. можно использовать в разных языках прогр-я и в разных операц. системах. Java и Windows не явл. прочно связанными средами . Разработка в к. 90-х С# . От С язык С# унаследовал синтаксис, многие ключ. слова и операторы. C# предназначены для создания переносимого кода. Наличие встроенных ср-в написания прогр-ных компонентов позволило С# называть компонентно-ориентированным языком. Важное качество комп.-ориент. языка - его способность работать в среде многоязыкового прогр-я.Осн. возм-сти .NET. 1)явл. полностью независ. от используемых языков прогр-я. 2)Полные возм-сти взаимод-я с сущ. прогр- кодом (созд. двоичные файлы .NET) 3) Общая среда выполнения для любых приложений .NET. Для всех языков исп. один и тот же набор встроенных типов данных.

2. Что такое .NET? Обзор технологий программирования под Windows.

Новая технология .NET, предложенная компанией Microsoft, отражает видение этой компанией приложений в эпоху Internet. Технология .NET обладает улучшенной функциональной совместимостью, в основе которой лежит использование открытых стандартов Internet.

Microsoft .NET — платформа, построенная на верхнем слое операционной системы. Технология .NET явилась главным объектом инвестиций компании Microsoft.

Осн. возм-сти .NET.1)явл. полностью независ. от используемых языков прогр-я. 2)Полные возм-сти взаимод-я с сущ. прогр- кодом (созд. двоичные файлы .NET) 3) Общая среда выполнения для любых приложений .NET. Для всех языков исп. один и тот же набор встроенных типов данных. 4) Использование библиотек базовых классов позволяют скрывать сложность вызовов функций Win32.API (ApplicationProgrammingInterface – интерфейс прикладного программирования под Windows, состоящий из 1000 глобальных функций)

Обзор технологий программирования под Windows.1)Программирование на С с использованием Win32API. 2)VisualBasiс язык для работы с объектами, он не объектно-ориентированный. 3)Программирование на С++ и использование библиотека MFC(MicrosoftFoundationClasses, сложный для чтения код). 3)Технология СОМ – MicrosoftComponentObjectModel – модель многокомпонентных объектов для разработки приложений-серверов и приложений-контейнеров. Упрощение для СОМ – библиотека ATL.

Модель многокомпонентных объектов является двоичным стандартом интерфейса объектов в Windows. Это означает, что выполняемый программный код (в файлах .DLL или .EXT), который описывает объект, может быть вызван на выполнение другим объектом. Даже если оба объекта были написаны на разных языках, они сохраняют возможность взаимодействия между собой, используя стандарт СОМ.

Приложения создаваемые с помощью платформы .NET: 1) Приложения Windows.Forms (это технология, построенная на базе управляемых классов и являющаяся частью среды .NET). С помощью Windows. Forms можно быстро создавать интерфейсы для своих приложений, рассчитанных на использование Web. Технология Windows.Forms обеспечивает поддержку быстрого подключения к Web-службам и построения мощных, основанных на модели ADO.NET приложений с возможностью доступа к базам данных. 2) приложения типа Web-службы без интерфейса. Одним из основных требований в области современного Web-программирования является возможность преобразования приложений, созданных с помощью разных языков программирования для различных операционных систем, в Web-приложения.

Простые примеры существующих Web-служб – электронная почта, службы поддержки Internet-чатов. Web-службы предназначены для обработки удаленных вызовов, они должны уметь выполнять какое-либо действие по запросу пользователя и ждать следующего запроса. К Web-службам могут обращаться и обычные локальные или Windows-клиенты (локальные, клиенты терминальных служб).для этого генерируются прокси-сборки. К прокси-сборкам идет обращение как к объектному типу .NET, а она (.NET) перенаправляет запрос в Web-службу и возвращает клиенту результат.

Web-сервер– это программный продукт, на котором размещают ваши Web-приложения и который обеспечивает набор, связанных с Web-приложениями служб, таких как:

· Интегрированные средства обеспечения безопасности;

· Поддержка протокола FTP;

· Поддержка средств передачи электронной почты и т.д.

 


 

3. Компоненты платформы .Net. Что такое .NET Framework?

Microsoft.NET включает в себя следующие компоненты: 1) Инфраструктура .Net ( .NETFrameWork) и инструмент. ср-ва (VisualStudio); 2) Службы .NET;
3) ПО для работы на разл. устр-вах и платформах; 4) Опыт пользователя;

Инфраструктура .NET и инструмент. ср-ва. Служат для создания и эксплуатации служб нового поколения. Примерами таких средств могут быть: .NETFrameWork, VisualStudio.NET (её новая версия VS2005), семейство корпоративных серверов EnterpriseServers (для взаимодействия с Web). В EnterpriseServers входят компоненты к примеру:

· MSExchange 2000 Server– решение для обеспечения совместной работы пользователей и обмене инф-ей между ними;

· MSMobileInformation 20010 Server– ср-во для доставки инф-ции с серверов на портат. цифровые устр-ва, вкл. сотовые тел.;

· MSSQLServer 2000– ср-во, обеспечив. хранение, поиск и анализ структуриров. Инф-ции для Web-приложений.

Службы .Net. Одна из целей созд..NET - заимствование принципов работы операц. системы по отношению к среде Internet. Сеть Internet - сама стала операц. системой.

ПО для работы на разл. устр-вах и платформах. Платформа .NET устраняет ограничение взаимодействия с Internet, связанные с несовместимостью разл. устр-в. Обеспечив. полная независимость от типа используемых устр-в. Это может быть и карманный компьютер, и мобильный телефон, и персональный компьютер в офисе.

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

Что такое .NetFramework?Это компонент платформы .NET, среда для разработки и выполнения распределенных приложений, основанных на использовании компонентных объектов. Она позволяет «мирно» существовать различным языкам программирования и обеспечивает безопасность, переносимость программ и общую модель программирования для платформы Windows. .NETFramework не ограничена применением в Windows, т.е. программы, написанные для нее, можно затем переносить в другие среды. Язык C# разработан фирмой Microsoft для создания кода, выполняющегося в среде .NETFramework. В этой среде определены библиотеки, используемые языком C#. Из чего состоит .NET Framework. -CommonLanguageRuntime(CLR)–не зависящая от языка среда выполнения; - BОсновная структура или базовая библиотека классов(BaseFramework); - Шаблоны(типы) приложений (Application Framework)

Модель выполнения приложения в среде .NetFramework. Промежуточныйязык Microsoft (Microsoft Intermediate Language, MSIL). Сборки

Исх. код может быть написан на неск. языках прогр-я. Код компилируется спец. .NET-компилятором. В рез.компил-и – не исполнимый код, а файл, кот.содержит псевдоходы, наз-мый промежуточным языком MS MSIL содержит набор переносимых инстр-ций, кот.не зависят от типа процессора.

Цель среды выполнения CLR: перевести код прогр-мы в исполняемый. Так достигается переносимость пр-м. код, напис.на языке MSIL, перев.в исполняемый с пом.JIT(just-in-time)-компилятора – выполнение точно нужного момента. При написании пр-мы создается управляемый код– код, управляемый CLR-системой. Но платформа .NET может обрабатывать коды, кот.созданы до появления среды CLR. Сборки.В прошлом готовый прогр-й пакет мог распространяться в виде исполняемого файла, файлов DLL и LIB, файла DLL с объектом СОМ и библиотекой типов или в другом формате. В среде .NET исп-ся мех-м распростр-я, наз-й сборкой (assembly). В пр-се компиляции прогр-го кода любым компилятором .NET код преобр. в промежуточную форму, наз. «IL». Сборка содержит ІL, метаданные и ост. файлы, необх. для работы пакета, объединенные в одно целое. Каждая сборка содержит манифест (manifest) перечнем файлов, входящих в сборку. В манифесте указано, какие типы и ресурсы сборки доступны за ее пределами, и установлено соответствие этих типов и ресурсов тем файлам, в кот. они нах. В манифесте перечисляются другие сборки, от кот. зависит данная сборка. Сборка автономна, а хран-ся в ней инф-я обеспечивает ее самодокументирование. Сборка может находиться в одном файле или неск. файлах. При использовании нескольких файлов становится возможным сценарий, при кот. части сборки загружаются по мере надобности.

 

 

5. Обзор встр. типов данных в С#. Применение встроенной функц-сти типов данных.

В С# сущ. Мн-во встроенных или простых типов. Любой встроенный тип С# - это псевдоним для системного типа, определённого в пространстве имён System.

Простые типы С# и системные типы

Простой тип С# Системный тип Диапазон знач. Описание типа
Sbyte Sbyte -128…+128 Число со знаком занимает 1 байт
Byte Byte 0…255 Число без знака занимает 1 байт
Short Int16 -32768…32667 Короткое 16 битовое число со знаком (2 байта)
Ushort Uint26 0…65535 Короткое 16 битовое без знака
Int Int32 -2147483648…2147483648 Целое 32 битовое со знаком
Uint Uint32 0…4294967295 целое 32 битовое без знака
Long Uint64 0…18446744073709551615 Знаковое 64 битное целое
Ulong   0…2^64-1 64 битное 8 байтное целое со знаком
Char Char 2 байта для расширенной табл.кодов символов Один 16 битовый символ Юникод
Float Single -3.40282e+038…3.40282e+038 Вещ.число одинарной точности с плавающей запятой. Заним.32 бита или 4 байта
Double Double -1.79769e+308…1.79769e+308 Вещ.число двойной точности с плавающей запятой. Заним.64 бита или 8 байт
Bool Boolean True or False Логические данные
decimal Decimal 10^0…10^28 Число фиксированной точности или 12 байт
String String Ограниченно сист.памятью Строка символов
Object Object Практ.все что угодно. Все типы происходят от класса System.Objekt поэтому обектом явл.все

У всех встроенных типов есть значение по умолчанию (0-для числовых, false-bool,null –string, object; но в методах классов переменные нужно инициализировать).

Системные имена называют также структурами типов значений. Структуры имеют методы. Например Int32 -Parse(string) преобразует строку символов string в число.

 

 


6. Операции ввода-вывода. Формат вывода. Пространство имён System. Класс Math. Пространство имён System и класс Math

В классе Math определенны станд-е матем. операции. Например, метод Pow возводит вещ. число X в степень Y. Кроме переменных и констант, первичным материалом для построения выражений явл. ф-ции. Большинство создано программистом, но не обойтись и без встр. ф-ций. Класс Math содержит станд. Матем. Ф-ции. Этот класс сод. два стат. поля, задающих константы E и PI, а также 23 стат. метода. Методы задают:

Тригоном. Ф-ции - Sin, Cos, Tan;

· Обр. Тригон. Ф-ции - ASin, ACos, ATan, ATan2 (sinx, cosx);

· Гипербол. Ф-ции - Tanh, Sinh, Cosh;

· экспоненту и логарифм. Ф-ции - Exp, Log, Log10;

· модуль, корень, знак - Abs, Sqrt, Sign;

· ф-цииокругления - Ceiling, Floor, Round;

· минимум, максимум, степень, остаток - Min, Max, Pow,

· IEEERemainder.

Ввод данных в C#

Console.Read() вводит 1 символ

Метод Console.ReadLine() вводит строку символов, чтобы преобразовать строку в число нужно применить метод Parse(string).

Для этого нужно:

1)объявить строковую переменную stringst;

2)с помощью метода Console.ReadLine() ввести эту строку st=console.ReadLine();

3)преобразовать строку в число, если целое: intx=Int32.Parse(st)


 

7. Арифметические операции. Операции отношений и логические операции. Операторы и выражения в C# .

БинарныеОператор Операция Тип операндов Тип рез. Пример

+ сложение целый, вещ. целый, вещ. A =X + Y;

- вычитание целый, вещ. целый, вещ. A =Result-1;

* произведение целый, вещ. целый, вещ. A =P * I;

Оператор деления (/) делит первый операнд на второй. Все числовые типы имеют предопределенные операторы деления. При делении двух целых чисел результат всегда является целочисленным. Например, результат деления 5 на 2 — 2. Чтобы определить остаток от деления 5 / 2, используйте оператор modulo (%). Чтобы получить частное в виде рационального числа или дроби, присвойте делителю или делимому тип float или double. Чтобы явно присвоить тип, можно поместить десятичный разделитель после числа, как показано в следующем примере.

Console.WriteLine(5/2);Console.WriteLine(5 % 2);Console.WriteLine(5 / 2.1); Console.WriteLine(5.1 / 2);Console.WriteLine(-5 / 2);Ответы: 2 1 2.38095238095238 2.55 –2

Оператор % - остаток от целого деления A:=Y % 6;

15 / 4 = 3 5 / 9 = 0 7 / 7 = 1 9 / 8 = 1 24 % 6 = 0 24 % 7 = 3 7 % 7 = 0 8 % 12 = 8

УнарныеОператор Операция Тип операндов Тип рез. Пример

+ (унарный) знак плюс целый, вещ. целый, вещ. A =+7;

- (унарный) знак минус целый, вещ. целый, вещ. A =-X;

Оператор увеличения (++) увеличивает свой операнд на 1. Оператор увеличения может находиться как до, так и после операнда. Первой формой является префиксная операция увеличения. Результатом этой операции является значение операнда после его увеличения. Второй формой является постфиксная операция увеличения. Результатом этой операции является значение операнда до его увеличения. Числовые типы и типы перечисления имеют предопределенные операторы увеличения. Типы, определенные пользователем, могут вызвать перегрузку оператора ++. Операции с целыми типами обычно разрешены в перечислениях.

doublex;x = 1.5;Console.WriteLine(++x); //напечатается 2.5x = 1.5;Console.WriteLine(x++);//напечатается 1.5Console.WriteLine(x); //напечатается 2.5

Оператор уменьшения (--) уменьшает свой операнд на 1. Оператор уменьшения может находиться как до, так и после операнда: и --variable и variable--.

Также имеется возможность комбинировать оператор присваивания с арифметическими операторами для образования составных операторов присваивания:+= -= *= /= %=

Пример: i += 7 * j; // Эквивалентно i = i + 7 * j; m /= 3 + k; // Эквивалентно m = m / (3 + k);

Комментарии: 1) Однострочные, указывает префикс //; 2) Многострочные, помещаются между символами /* */.

Операторы сравнения в C#. Лог. операции для условий

&& Соответствует логическому И (AND)
|| Соответствует логическому ИЛИ (OR)
! Соответствует логическому НЕ (NOT)

Операторы

1. Формат: Один оператор может занимать одну или более строк. Два или большее количество операторов могут быть расположены на одной строке.

2. Вложенность: Операторы, управляющие порядком выполнения (if , if-else, switch, while, do-while, for) могут быть вложены друг в друга.

3. Метка оператора: Метка может стоять перед любым оператором, чтобы на этот оператор можно было перейти с пом. оператора goto. Метка состоит из идентификатора, за кот. стоит двоеточие (:). Областью определения метки явл. данная ф-ции. Пример: ABC2: x=3;

4. Составной оператор: (блок) сост. из одного или большего числа операторов любого типа, заключ. в фигурные скобки ({}). После закрывающей фигурной скобки не должно быть точки с запятой (;).

5. Оператор-выражение: Любое выражение, заканчивающееся точкой с запятой (;), является оператором.

Пустой оператор: Состоит из точки с запятой (;). Используется для обозначения пустого тела управляющего оператора.

6. Оператор завершения break:

break;

Прекращает выполнение ближайшего вложенного внешнего оператора switch, while,do или for.

Управление передается оператору, следующему за заканчиваемым. Одно из назначений этого оператора- закончить выполнение цикла при присваивании некоторой переменной определенного значения.

7. Оператор возврата return:

Return;

Прекращает выполнение текущей функции и возвращает управление вызвавшей программе.

return выражение;Прекращает выполнение текущей функции и возвращает управление вызвавшей программе с передачей ей значения выражения.

Условный оператор if-else:if(логическое выражение) <оператор>;

Если выражение истинно, то выполняется <оператор>.Если выражение ложно, то ничего не делается.if (выражение) <оператор1>else<оператор2>;

8. Оператор-переключатель или оператор выбора switch:

switch (выражение) { case константа1 : <операторы;>break;

case константа2 : <операторы;>break;

… default: <операторы;>break; }

Селекторное выражениеможет принимать не только числовое значение, а и строковое.

9.Оператор цикла while:while (логическое выражение) { <операторы;> }

13, Оператор цикла do … while:Do<оператор>while (логическое выражение);

10.Оператор цикла for:for (выражение1; выражение2; выражение3) { <операторы;> }

11. Примечание: Оператор «Запятая».Позволяет объединить два выражения в одно там, где синтаксис С# допускает только одно выражение.


 

8. Одномерные массивы в C#. Класс System.Random, применение его методов для создания массива случайных чисел. Класс System.Array, использование его методов и свойства Length.

В С# массивы реализованы как объекты. Тип массив определён в системном типе System. Array. Массив – это набор эл-тов данных одного типа, сохранённых в непрер-й об-сти памяти. Массив сод. список ссылок на ячейки памяти, в кот. сохранены эл-ты массива. Массив может быть объявлен с указанием любого типа данных.

В С# размер массива не нужно указывать при его объявлении. Этим достигается большая гибкость, размер опред. в тот момент, когда массив будет использоваться.

Существует 2 сп-ба объявления массива: 1) «Позднее связывание» - размер массивасразу не указывается, а определяется позже, когда массив будет использоваться. Объявление массива: Тип_элементов[] имя_массива; Пример: int [] mas1; 2) раннее связывание, т.е. массиву сразу выделяется память. Тип_элементов[] имя_массива = newТип_элементов[кол-во_элементов]; Эта фраза работает с хвоста. Сначала определяется кол-во эл-тов, затем их тип, затем общий размер блока памяти для массива. Если бы было позднее связывание, то нужно выделить массиву память: mas1=newint[n].

Существуют способы создания элементов массива с клавиатуры и с помощью генерации элементов случайным образом. Для генерации элементов массива случайным образом оформим класс Random. В Main(): RandomOb=newRandom(); В этом классе есть 2 конструктора: без параметра (publicRandom() генерирует неповторяющиеся при каждом запуске целые числа), publicRandom (intx) –конструктор с целочисленным параметром х. Генерирует повторяющийся набор случайных чисел, начиная с х.

В этом классе имеются перегруженные методы (имеющие одинаковые имена): 1) publicintNext() –возвращает целые положительные числа во всем положительном диапазоне типа int. 2) publicintNext (intmax) –возвращает целые положительные числа от 0 до max, не включая max. 3) publicintNext(intmin, intmax) –возвращает целые положительные числа от minдо max.

Созданиеэл-товмассиваRANDOMом: for (i=0; i<n; i++) mas [i]=(float)(Ob.Next(100)+Ob.NextDouble());Console.WriteLine(“Содержимоемассива:”); for (i=0; i<n; i++) Console.Write(“{0:#.##} “,mas[i]); Console.WriteLine();

Класс System.Array, использование его методов и свойства Length.Этот класс поддерживает работу со всеми числовыми массивами. В нем имеются такие полезные методы, как Array.Sort(Имя_массива),которые упорядочивают элементы по возрастанию. Array.Revers(Имя_массива), который инверсирует массив. Удобно при обработке массивадля установки его текущего размера использовать св-во Length, который возвращает кол-во элементов в массиве. for(i=0; i<mas.Length; i++) Array.Sort(mas);

Класс System.Array наследует ряд интерфейсов: ICloneable, IList, ICollection, IEnumerable, а, следовательно, обязан реализовать все их методы и св-ва. Класс Array имеет большое число собств. методов и св-в.

 


9. Двумерныемассивы в C#. Виды двумерных массивови способы их определения; способы создания; построчный вывод на экран

Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор однотипных данных, имеющий общее имя, доступ к элементам которого осуществляется по двум индексам. Наглядно двумерный массив удобно представлять в виде таблицы, в которой n строк и m столбцов, а под ячейкой таблицы, стоящей в i-й строке и j-м столбце понимают некоторый элемент массива a[i,j].

Массивы в С# могут быть объявлены с любым кол-вом измерений. Рассм. простейший многом. массив – двумерный или прямоугольный. При объявлении в [ ] через запятую указывается размер массива для каждого измерения. Объявим, например, матрицу 10Ï20 целых чисел: int [,] Matrix = newint[10,20]; // Создаётся ссылочная переменная двухмерного массива

Пример: заполняем матрицу 3Ï4 числами от 1 до 12

using System; Class Dwumas

{ public static void Main() { int i, j; int [,] Matr = new int [3,4];

for (i = 0; i < 3; i + +) { for (j = 0; j < 4; j ++) { Matr [i,j] = (i*4) + j + 1;

Console. Write(Matr [i,j] + “ ”); } Console. WriteLine(); }

Альтернативный способ доступа к элементам массива – цикл foreach.

Пример использования foreach для вывода элементов массива:

using System; class use mas { static void Main() {

Console. WriteLine(“Сколько чисел вы хотите ввести”);

int n = int32. Parse(Console. ReadLine());

int [ ] Mas = new int [n]; for (int k = 0; k < n; k + +)

{ Console. WriteLine(“Введитечисло”);

Mas [k] = int32.Parse(Console. ReadLine()); }

foreach(int z in Mas) Console. WriteLine(“Это число {0}”, z); } }

Массивом наз. упорядоченную совок-сть эл-тов одного типа. Каждый эл-т массива имеет индексы, определяющие порядок эл-тов. Число индексов хар-ет размерность массива. Каждый индекс измен. в некот. диапазоне [a,b]. Диапазон [a,b] наз. граничной парой, a - нижней границей, b - верхней границей индекса. При объявлении массива границы задаются выражениями. Если все границы заданы константными выражениями, то число эл-тов массива известно в момент его объявления и ему может быть выделена память еще на этапе трансляции. Такие массивы наз. статическими. Если же выражения, задающие границы, зависят от переменных, то такие массивы наз. Динамическими. Массиву выделяется непрерывная обл. памяти.

C# поддерживает многомерные массивы двух видов. Первый вид - прямоугольные массивы.

1) int [] k = new int [2, 3]

2) int[,] k = {{ 2, -2 }, { 3, -22 }, { 0, 4 }};

Двумерный прямоугольный массив - это массив в каждой строке которых одинаковое число столбцов. Он инициализируется так: string [,] (двумерный массив строк). Второй вид - неровные массивы. Каждый ряд неровного двумерного массива может содержать различное число столбцов. При создании нервных массивов на самом деле формируется массив массивов

Наряду с прямоугольными массивами существуют так называемые ступенчатые. Вот пример:
//Объявляем 2-мерный ступенчатый массив int[][] k = new int [2][];

Обратите внимание, что у ступенчатых массивов мы задаем несколько пар квадратных скобок (по размерности массива). И точно так же мы что-нибудь делаем с элементами массива — записываем, читаем и т. п.
Самая важная и интересная возможность ступенчатых массивов — это их «непрямоугольность». Так, в приведенном выше примере в первой «строке» массива к три целых числа, а во второй — восемь.

 

Реализовать построчный вывод на экран можно с помощью такого вида программного кода:

for (kk = 0; kk < n; kk++) { for (mm = 0; mm < n; mm++) Console.WriteLine(mas[kk, mm] + " "); }

 

10. Структуры в C#. Создание структур, доступ к элементам, массивы структур.

Структуры, как и классы, используются как контейнерные объекты для многих видов объектов данных. Они могут реализовывать конструктуры, константы, поля, свойства, индексаторы, операторы и вложенные типы, т. е. структуры поддерживают все возможности, которые реализуются с помощью классов. Структуры во многом схожи с классами. Но классы являются ссылочными типами и поэтому только ссылаются на данные, которые в них хранятся. Структуры хранят действительные значения. Память для структур выделяется в стеке. По этой причине доступ к структурам осуществляется быстрее, чем классам, которые сохраняются в куче. Структуры не поддерживают наследования, но они, как и классы, могут реализовывать интерфейсы.Объявление структуры с помощью слова struct. [<атрибут><модификатор>struct<идентификатор>: <интерфейс><тело структуры>;]Пример: usingSystem;ClassusesStruct

{ struct point

{ public double x,y;

public point (double x, double y)

{ this.x = x;

this.y = y;}

}

static void Main ()

{ point [ ] pt = new point [5]; …

for (int i = 0; i < 5; i + +)

{ pt [i] = new point (i, i+2);

Console. Writeline (“{0}”, i);

Console. Writeline (“Значение x = {0}”, pt [i].x);

Console. Writeline (“Значение y = {0}”, pt [i].y); }

} }

Все базовые типы в С# в основном являются типами структур (sbyte, int, long), т. е. имена встроенных типов только псевдонимы соответствующим структурам пространства имён System. Стуктуры инициализируются только с помощью вызова конструктора. Структуры не поддерживают наследования. Однако, как и другие типы, они являются производными единого базового класса System. Object.