Общая система типов. NET

Для того чтобы различные языки программирования могли осмысленно общаться между собой, необходимо ввести единую систему типов, которая была бы достаточно полной и при этом оставалась бы ясной. В.NET такую роль выполняет Common Type System (CTS).

Основные функции CTS следующие.

1. Формирует среду, способствующую межъязыковой интеграции, безопасности типов, а также высокой производительности исполнения кода.

2. Определяет правила, управляющие наследованием типов, виртуальными методами и продолжительностью существования объектов.

3. Определяет правила, гарантирующие, что типы данных объектов, написанные на разных языках, смогут взаимодействовать друг с другом.

4. Определяет правила для видимости типов и доступа к членам типа.

Общая система типов.NET является «каркасом», в рамки которого должна поместиться система типов любого языка программирования, допускающего компиляцию в CIL (рис.2.2).

Рисунок 2.2. Система типов.NET

Два основных вида данных в системе типов.NET - это типы-значения (value types) и типы-ссылки (reference types). Основное различие между ними заключается в том, что тип-значение представляет собой просто последовательность битов в памяти, а ссылочный тип дополнительно обладает "индивидуальностью". Например, 32-битовое знаковое целое является типом-значением. Если будут сравниваться два любых целых, то они будут считаться равными, если содержат одинаковое число. С другой стороны, два разных объекта, представляющие один и тот же класс, могут содержать абсолютно одинаковые данные, но при этом не будут равными, так как указывают на разные участки памяти.

Некоторые типы данных используются настолько часто, что компиляторы позволяют обращаться с ними по упрощенной схеме. Например, в С# возможно следующее определение:

string s = "Hello C#";

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

Вообще говоря, string является обычным типом, который ничем не отличается от других типов данных. Типы данных, напрямую поддержанные компилятором и допускающие подобные сокращения записи, называются примитивными типами. Примитивные типы преимущественно являются типами-значениями, и память под них выделяется на стеке данного потока. Большинство примитивных типов различных языков программирования проецируется на типы данных, существующие в базовой библиотеке классов.NET.

Контрольные вопросы

1. Что является основой платформы.NET?

2. В чем отличие стратегии выполнения программ в рамках платформы.NET от стратегий выполнения программ компилируемого и интерпретируемого типов?

3. Какую роль играет Common Intermediate Language (CIL) в платформе.NET?

4. Каким образом в рамках платформы.NET обеспечивается безопасность исполняемого кода?

5. Назовите преимущества использования общей системы типов.NET.

6. В чем принципиальное отличие типов-значений от типов-ссылок?


 

3. Основы языка С#

3.1. Структура программы на С#

Одна из принципиальных отличительных особенностей языка C# в том, что он является полностью объектно-ориентированным. Это означает, в частности, что основными «строительным блоками» программы на C# являются классы. Класс здесь – это специальная синтаксическая конструкция, имеющая имя и состоящая из трех основных частей:

· полей;

· методов;

· свойств (специальная конструкция, занимающая промежуточное  положение между полем и методом) [4,5].

Таким образом, программа на C# – это всегда как минимум один класс, состоящий из одного метода, с выполнения которого начинается выполнение программы.

Простейший класс С# может быть определен следующим образом:

 

// Обычно для файлов классов С# используется расширение

// *.cs

using System;

class HelloClass

{

public static int Main(string[] args)

{

 Console.WriteLine("Hello.World");

  return 0;

}

}

В программе создан класс HelloClass, который поддерживает единственный метод - Main(). В любом приложении С# должен быть определен класс с методом Main(). Этот метод будет использован как точка входа приложения - то есть работа приложения начнется с выполнения этого метода. В принципе можно создать несколько классов с методами Main(), однако в этом случае придется явно указать, какой из этих методов будет использован в качестве точки входа. Если такое указание будет пропущено, результатом станет сообщение компилятора об ошибке.

Первая буква в названии метода Main() - заглавная. Такое написание обязательно, так как синтаксис языка C# является регистрозависимым.

В данном случае метод Main() был определен как public и как static. Подробнее об этих ключевых словах будет рассказано далее. Пока достаточно отметить, что ключевое слово publiс в определении метода означает, что этот метод будет доступен извне, а ключевое слово static говорит о том, что этот метод позиционируется на уровне класса, а не отдельного объекта и будет доступен даже тогда, когда еще не создано ни одного экземпляра объекта данного класса.

Кроме того, метод Main() принимает единственный параметр, который должен быть набором символов (string[] args). Хотя этот параметр в программе нигде не встречается, его можно использовать для приема параметров, если приложение запускается из командной строки.

Вся программная логика HelloClass заключена в самом методе Main(). Этот метод обращается к классу Console, определенному внутри пространства имен System. Один из членов метода Console - статический метод WriteLine(), который можно использовать для вывода строки на системную консоль. Поскольку метод Main() был определен как int, то он должен вернуть целочисленное значение (в нашем случае «0» - стандартный код успешного завершения программы).



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: