Учебно-методический комплекс общее количество часов 58 ч. Лекции 28 ч


Download 2.46 Mb.
bet49/91
Sana19.10.2023
Hajmi2.46 Mb.
#1709453
TuriУчебно-методический комплекс
1   ...   45   46   47   48   49   50   51   52   ...   91
Bog'liq
Язык программирования C#

11. СТРУКТУРЫ И ПЕРЕЧИСЛЕНИЯ


11.1. Понятие структуры


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

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




struct имя_структуры
{
// определение членов
}

Спецификаторы перед определением самой структуры или её членов используются те же, что и для классов за исключением того, что спецификаторы, необходимые для наследования (sealed, virtual, abstract) не применяются, т.к. структуры не могут выступать в качестве родителей при наследовании.


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

public struct Book


{
public decimal Price;
public string Title;
public string Author;
}
Лист. 2.1

Эта структура содержит определение всех необходимых полей для хранения информации о книге. Объявление экземпляра структуры аналогично объявлению экземпляра класса и имеет следующий общий формат.


имя_структуры имя_переменной;


В нашем случае для объявления и создания экземпляра структуры достаточно написать следующую строчку кода.


Book aBook;
Лист. 2.2

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


Book aBook = new Book();


Лист. 2.3

Доступ к членам структуры осуществляется также как и доступ к членам класса, с использованием оператора уточнения точки. Вообще в языке C# все уточнения делаются с использованием одного единственного оператора точки “.”.


aBook.price = 30;


aBook.title = "Основы С#";
aBook.author = "Азиз Ходжаев";
Лист. 2.4

В этом листинге полям объекта aBook присваиваются некоторые значения, к которым в дальнейшем можно будет обратиться.


Console.WriteLine(aBook.price);


Console.WriteLine(aBook.title);
Console.WriteLine(aBook.author);
Лист. 2.5

Объединим все приведенные выше разрозненные примеры в одно целое. Это позволит лучше рассмотреть предмет в перспективе.


public struct Book


{
public decimal price;
public string title;
public string author;
}

class Program


{
static void Main(string[] args)
{
Book aBook;
aBook.price = 30;
aBook.title = "Основы С#";
aBook.author = "Азиз Ходжаев";

Console.WriteLine(aBook.price);


Console.WriteLine(aBook.title);
Console.WriteLine(aBook.author);
}
}
Лист. 2.6

Вывод программы:


30
Основы С#


Азиз Ходжаев
Вывод. 2.1

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


1. Конструктор структуры должен инициализировать все её поля.
2. В структуре нельзя создать конструктор без параметров.

struct Square


{
double X1, Y1; // левый верхний угол
double X2, Y2; // правый нижний угол

public Square(double X1, double Y1, double X2, double Y2)


{
this.X1 = X1;
this.Y1 = Y1;

this.X2 = X2;


this.Y2 = Y2;
}

public double Rib


{
get
{
if (X1 > X2)
return (X1 - X2);
else
return (X2 - X1);
}
}

public double GetDaigonalLength()


{
return Math.Sqrt((X2 - X1) * (X2 - X1) + (Y2 - Y1) * (Y2 - Y1));
}
}
Лист. 2.7

На листинге приведена структура, инкапсулирующая представление квадрата на прямоугольной системе координат. Создадим теперь класс для тестирования созданной нами структуры.


class Program


{
static void Main(string[] args)
{
Console.WriteLine("NullSquare");
Console.WriteLine(NullSquare.Rib);
Console.WriteLine(NullSquare.GetDaigonalLength());

Console.WriteLine("aSquqre");


Console.WriteLine(aSquqre.Rib);
Console.WriteLine(aSquqre.GetDaigonalLength());
}
}
Лист. 2.8
В этом листинге создаются два экземпляра структуры Square: NullSquare и aSquqre. Затем производится обращение к методам и свойствам обеих структур. По результатам вывода этой программы видно, что пустой конструктор проинициализировал все поля объекта NullSquare значениями по умолчанию.
Вывод программы:
NullSquare
0
0
aSquqre
2
2,82842712474619
Лист. 2.9



Download 2.46 Mb.

Do'stlaringiz bilan baham:
1   ...   45   46   47   48   49   50   51   52   ...   91




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling