Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка ООП C#.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
13.94 Mб
Скачать

Понятие общей системы типов (cts)

Сборка может содержать любое количество различающихся типов. В мире .NET тип — это просто общий термин, используемый для ссылки на члены из набора {класс, интерфейс, структура, перечисление, делегат}. При построении решений на любом языке .NET, скореевсего, придется взаимодействовать со многими из этих типов. Например, сборка может определять класс, реализующий несколько интерфейсов. Возможно, метод одного из интерфейсов принимает в качестве входного параметра перечисление, а возвращает структуру. Вспомните, что CTS является формальной спецификацией, в которой указано, как типы должны быть определены, чтобы они могли обслуживаться средой CLR. Внутренние детали CTS обычно интересуют только тех, кто занимается разработкой инструментов и/или компиляторов для платформы .NET. Однако все .NET-программисты должны уметь работать с пятью типами, определенными CTS, на выбранном языке.

  1. Каждый совместимый с .NET язык поддерживает, как минимум, понятие типа класса, которое играет центральную роль в ООП. Класс может включать любое количество членов (таких как конструкторы, свойства, методы и события) и элементов данных (полей). В C# классы объявляются с помощью ключевого слова class, примерно так:

// Тип класса C# с одним методом.

class Calc

{

public int Add(int x, int y)

{

return x + y;

}

}

  1. Интерфейсы — это всего лишь именованные коллекции определений абстрактных членов, которые могут поддерживаться (т.е. быть реализованными) в заданном классе или структуре. В C# типы интерфейсов определяются с помощью ключевого слова interface. По соглашению имена всех интерфейсов .NET начинаются с прописной буквы I, как показано в следующем примере:

// Тип интерфейса в C# обычно объявляется

// открытым, чтобы позволить типам в других

// сборках реализовать его поведение.

public interface IDraw

{

void Draw();

}

  1. Концепция структуры также формализована в рамках CTS. Тем, кто имел дело с языком С, будет приятно узнать, что определяемые пользователем типы (user-defined type — UDT) сохранились в мире .NET (хотя их поведение несколько изменилось). Выражаясь просто, структуру можно считать облегченным типом класса, имеющим семантику на основе значений. Более подробно структуры рассматриваются в главе 4. Обычно структуры лучше всего подходят для моделирования геометрических и математических данных и создаются в C# с применением ключевого слова struct, как показано в следующем примере:

// Тип структуры в C#.

struct Point

{

// Структуры могут содержать поля.

public int xPos, yPos;

// Структуры могут содержать параметризованные конструкторы.

public Point(int х, int у)

{ xPos = x; yPos = y;}

// Структуры могут определять методы.

public void PrintPosition()

{

Console.WriteLine("({0}, {1})", xPos, yPos);

}

}

  1. Перечисления — это удобная программная конструкция, которая позволяет группировать пары “имя-значение”. Например, предположим, что требуется создать игровое приложение, в котором игроку бы позволялось выбирать персонажа одной из трех категорий: Wizard (маг), Fighter (воин) или Thief (вор). Вместо того чтобы использовать и отслеживать числовые значения для каждого варианта, гораздо удобнее создать строго типизированное перечисление с помощью ключевого слова enum:

// Тип перечисления C#.

enum CharacterType

{

Wizard = 100,

Fighter = 200,

Thief = 300

}

  1. Делегаты являются .NET-эквивалентом безопасных к типам указателей на функции в стиле С. Главное отличие заключается в том, что делегат .NET представляет собой класс, порожденный от System.MulticastDelegate, а не просто указатель на низкоуровневый адрес в памяти. В C# делегаты объявляются с помощью ключевого слова delegate:

// Этот тип делегата в C# может "указывать" на любой метод,

// возвращающий значение int и принимающий два значения int.

delegate int BinaryOp(int x, int y);

Финальный аспект спецификации CTS, который следует знать на текущий момент, заключается в том, что она устанавливает четко определенный набор фундаментальных типов данных. Хотя в каждом языке для объявления фундаментального типа данных обычно предусмотрено уникальное ключевое слово, ключевые слова всех языков .NET в конечном итоге соответствуют одному и тому же типу CTS, определенному в сборке mscorlib.dll.

Таблица 1. Встроенные типы данных CTS