Языки программирования

Основные компоненты в .NET Framework

В .NET Framework есть три основных компонента: CLR, CTS и CLS. В этой статье рассмотри их подробнее.

CLR

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

CTS

Общая система типов (Common Type System) или система CTS предоставляет полное описание всех возможных типов данных и программных конструкций, которые поддерживаются исполняющей средой, а также способов, как все эти сущности могут взаимодействовать друг с другом. Нужно помнить, что любая возможность CTS может не поддерживаться в отдельно взятом языке, совместимом с .NET Framework.
CTS представляет собой формальную спецификацию, в которой описано то, как должны быть определены типы для того, чтобы они могли обслуживаться в CLR-среде. Существует пять типов CTS. Рассмотрим их подробнее:

Типы классов

В каждом совместимом с .NET языке поддерживается, как минимум, понятие типа класса (class type), которое играет центральную роль в объектно-ориентированном программировании. В C#, как и в других языках программирования, для объявления класса используется ключевое слово class:
class Car
{
  public int Run()
  { return 1; }
}

Типы интерфейсов

Интерфейсы представляют собой именованную коллекцию определений абстрактных членов, которые могут поддерживаться в данном классе или структуре. Пример определения интерфейса в C#:
public interface IDrive
{
  void Press();
}

Типы структур

Структура — это тип значения, неявно производный от типа System.ValueType, который, в свою очередь, является производным от типа System.Object.
Структуры весьма полезны для представления значений с небольшими требованиями к памяти и для передачи параметров по значению в методы со строгой типизацией параметров. В .NET все типы-примитивы (Boolean, Byte, Char, DateTime, Decimal, Double, Int16, Int32, Int64, SByte, Single, UInt16, UInt32 и UInt64) определяются как структуры.

Типы перечислений

Перечисления (enumeration) — удобная программная конструкция, позволяющая сгруппировать данные в пары «имя-значение». Например:
public enum eNums
{
 A =1,
 B =2,
 C = 3
}

Типы делегатов

Делегаты (delegate) — являются .NET-эквивалентом безопасных в отношении типов указателей функций в стиле С. Основное отличие заключается в том, что делегат в .NET представляет собой класс, который наследуется от System.MulticastDelegate, а не просто указатель на какой-то конкретный адрес в памяти. Пример объявления делегата:
public delegate int AddOp(int x, int y);
Делегаты удобно использовать, когда нужно обеспечивать одну сущность возможностью перенаправлять вызов другой сущности и образовывать основу для архитектуры обработки событий .NET Framework.

CLS

Третий компонент (Common Language Specification) или спецификация CLS. В ней описано лишь то подмножество общих типов и программных конструкций, каковое способны воспринимать все .NET языки.
CLS можно считать просто подмножеством всех функциональных возможностей, определенных в CTS. CLS является набором правил, которые должны придерживаться создатели компиляторов, если они хотят чтобы их продукты могли без особых проблем функционировать в мире .NET Framework.
Кроме среды CLR и спецификаций CTS и CLS, в составе платформы .NET существует библиотека базовых классов. В этой библиотеке содержатся определения примитивов (потоки, файловые I/O, системы графической визуализации, механизмы для взаимодействия с разными внешними устройствами), предоставляет поддержку ряда служб, которые нужны в большинстве реальных приложений.
Самоучитель по C#