Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Версии платформы .NET



Компанией Microsoft было выпущено несколько версий платформы.NET. В феврале 2002 года вышла первая официальная версия.NET Framework. Затем, в апреле 2003 года была опубликована версия 1.1 (пакет обновлений для версии 1.0). Ноябрь 2005 года ознаменовался выпуском версии 2.0, содержащей обновлённую CLR с поддержкой универсальных шаблонов (generics). В синтаксис языков C# и VB.NET были внесены изменения для поддержки шаблонов, а также улучшены технологии ASP.NET и ADO.NET. В ноябре 2006 года, вместе с выпуском операционной системы Windows Vista, вышла третья версия платформы.NET, которая содержала технологии Windows Presentation Foundation, Windows Communication Foundation, Workflow Foundation. В ноябре 2007 года вышла платформа.NET 3.5, основными особенностями которой являются реализация технологии LINQ и новые компиляторы для C# и VB.NET. В августе 2008 года опубликован пакет обновлений для версии 3.5. В апреле 2010 года была выпущена четвёртая версия платформы.NET, которая содержит переработанную CLR, а также интегрирует множество новых технологий, существовавших ранее в виде отдельных проектов (например, Parallel Task Library, DLR, ASP.NET MVC). Табл. 1 поясняет соотношение между версиями платформы.NET, версиями CLR и версиями языка C#.

Таблица 1

Версии платформы.NET, CLR и языка C#

Год выпуска              
Версия.NET 1.0 1.1 2.0 3.0 3.5 3.5 SP1 4.0
Версия CLR 1.0 1.1 2.0 4.0
Версия C# 1.0 2.0 3.0 4.0

2. Общие концепции синтаксиса языка C#

Специально для платформы.NET был разработан новый язык программирования C#. Этот язык сочетает простой синтаксис, похожий на синтаксис языков C++ и Java, и полную поддержку всех современных объектно-ориентированных концепций и подходов. В качестве ориентира при разработке языка было выбрано безопасное программирование, нацеленное на создание надёжного и простого в сопровождении кода. Здесь и далее рассматривается синтаксис четвёртой версии языка C#, доступной в составе.NET Framework 4.0.

Ключевыми структурными понятиями в языке C# являются программы, сборки, пространства имён, пользовательские типы, элементы типов. Исходный код программы на языке C# размещается в одном или нескольких текстовых файлах, имеющих стандартное расширение.cs. В программе объявляются пользовательские типы, которые состоят из элементов. Примерами пользовательских типов являются классы и структуры, а примером элемента типа – метод класса. Типы могут быть логически сгруппированы в пространства имён, а физически (после компиляции) – в сборки, представляющие собой файлы с расширением.exe или.dll.

Исходный код программы на языке C# – это набор операторов (statements), директив препроцессора и комментариев. Операторы языка C# и допустимые директивы препроцессора подробно будут рассмотрены далее. Комментарии игнорируются при компиляции и бывают двух видов:

1. Однострочный комментарий – это комментарий, начинающийся с последовательности // и продолжающийся до конца строки.

2. Блочный (многострочный) комментарий – все символы, заключённые между парами /* и */.

В C# различаются строчные и прописные символы при записи идентификаторов и ключевых слов. Количество пробелов в начале строки, в конце строки и между элементами строки значения не имеет. Это позволяет улучшить структуру исходного кода программы – операторы одного уровня вложенности обычно сопровождаются одинаковым начальным отступом.

Рассмотрим простейшую программу на языке C#, которая переводит расстояние в милях в километры.

using System;

class FirstProgram

{

static void Main()

{

Console.Write("Input miles: ");

string s = Console.ReadLine();

double miles = double.Parse(s);

Console.Write("In kilometers: ");

Console.WriteLine(miles * 1.609);

}

}

Программа представляет собой описание пользовательского типа – класса с именем FirstProgram. Необязательная директива using в первой строке программы служит для ссылки на пространство имён System, группирующее базовый набор классов. Использование using System позволяет вместо полного имени класса System.Console записать короткое имя Console.

Любая исполняемая программа на C# должна иметь специальную точку входа, с которой начинается выполнение программы. Такой точкой входа всегда является метод Main() с модификатором static, объявленный в некотором пользовательском типе программы (в данном случае – в классе FirstProgram). Метод Main() начинается с вызова метода Write() класса Console. Методы Console.WriteLine() и Console.Write() выводят информацию на экран, а метод Console.ReadLine() ожидает ввод пользователя и возвращает введённые данные как строку. Информация сохраняется в локальной строковой переменной s. Метод double.Parse() выполняет преобразование строки в вещественный тип.

Если программа содержится в файле FirstProgram.cs, то она может быть скомпилирована при помощи компилятора командной строки csc.exe. При этом допустимо указание различных параметров и опций (например, имени итоговой сборки, ссылок на необходимые сборки и так далее):

csc.exe FirstProgram.cs

После компиляции будет получена сборка FirstProgram.exe, готовая для запуска на любом компьютере с установленной платформой.NET.

Скомпилированные программы для платформы.NET допускают декомпиляцию, то есть восстановление исходного кода программы. Для этой цели можно использовать такие инструменты как ILDasm (от Microsoft), Reflector или ReSharper 6 Bundles Decompiler.

3. Система типов CLR и языка C#

Основой платформы.NET является развитая система типов. CLR использует уникальное имя типа, обычной составляющей которого является указание на пространство имён. Так, для представления строк служит тип System.String, где System – название пространства имён. Для наиболее распространённых типов платформы.NET язык C# предлагает короткие имена-псевдонимы. Например, тип int в C# – это псевдоним типа System.Int32, тип string – псевдоним типа System.String, и так далее.

Таблица 2

Сопоставление типовых псевдонимов C# и типов CLR

Тип C# Имя типа в CLR Примечание
sbyte System.SByte Знаковые целочисленные типы
short System.Int16
int System.Int32
long System.Int64
byte System.Byte Беззнаковые целочисленные типы
ushort System.UInt16
uint System.UInt32
ulong System.UInt64
char System.Char
float System.Single Типы с плавающей запятой
double System.Double
decimal System.Decimal Тип данных повышенной точности
bool System.Boolean Тип для хранения логических значений
T? System.Nullable<T> Тип значений T с поддержкой null (например, int?)
string System.String Тип для представления строк
object System.Object Базовый тип
dynamic System.Object Динамический тип с проверкой элементов при выполнении программы

Все типы платформы.NET можно разделить на типы значений (value types) и ссылочные типы (reference types). Переменная типа значения непосредственно содержит данные. К типам значений относятся структуры и перечисления. Структуры включают пользовательские структуры, простые типы (это числовые типы и тип bool) и типы с поддержкой null. Переменная ссылочного типа, далее называемая объектом, хранит ссылку на данные, которые размещены в управляемой динамической памяти. Ссылочные типы – это классы, интерфейсы, строки, массивы, делегаты и тип object.

С точки зрения компилятора языка C# типы можно разделить на примитивные типы и пользовательские типы. Поддержка примитивных типов обеспечена компилятором, такие типы не нуждаются в дополнительном объявлении. Простые типы и их варианты с поддержкой null, а также типы string, object и dynamic принято относить к примитивным типам. Пользовательские типы перед применением должны быть описаны при помощи особых синтаксических конструкций. Любая программа представляет собой набор определений пользовательских типов.

Рассмотрим некоторые типы подробнее. Числовые типы делятся на целочисленные типы, типы с плавающей запятой (удовлетворяют стандарту IEEE 754) и тип decimal (96 бит для хранения основания, 1 бит для хранения знака, 8 бит – число от 0 до 28, позиция запятой в основании справа). Информация о числовых типах представлена в табл. 3.

Таблица 3

Числовые типы

Категория Тип C# Размер (бит) Диапазон и точность
Знаковые целочисленные типы sbyte   -128..127
short   -32 768..32 767
int   -2 147 483 648..2 147 483 647
long   -9 223 372 036 854 775 808.. 9 223 372 036 854 775 807
Беззнаковые целочисленные типы byte   0..255
ushort   0..65535
char   Символ в кодировке UTF-16
uint   0..4 294 967 295
ulong   0..18 446 744 073 709 551 615
Типы с плавающей запятой float   От ±1.5×10-45 до ±3.4×1038, точность 7 цифр
double   От ±5.0×10-324 до ±1.7×10308, точность 15 цифр
Тип decimal decimal   От ±1.0×10-28 до ±7.9×1028, точность 28 цифр

Отметим, что типы sbyte, ushort, uint, ulong не соответствуют Common Language Specification. Это означает, что данные типы не следует использовать в интерфейсах межъязыкового взаимодействия.

Так как язык C# – это язык со строгой типизацией, необходимо соблюдать соответствие типов при присваивании и вызове методов. В случае несоответствия выполняется преобразование типов, которое бывает явным и неявным. Для явного преобразования (explicit conversion) служит операция приведения в форме (целевой-тип)выражение. При этом ответственность за корректность преобразования возлагается на программиста. Неявное преобразование (implicit conversion) не требует особых синтаксических конструкций и осуществляется компилятором. Подразумевается, что неявное преобразование безопасно, то есть, например, для целочисленных типов не происходит переполнения. Для числовых типов определено неявное преобразование типа A в тип B, если на рис. 2 существует путь из узла A в узел B.

Рис. 2. Схема неявного преобразования числовых типов.

Тип char представляет символ в Unicode-кодировке UTF-16. Тип char преобразуется в типы sbyte, short, byte явно, а в остальные числовые типы – неявно. Преобразование числового типа в тип char может быть выполнено только в явной форме.

Тип bool служит для хранения логических (булевых) значений. Переменные данного типа могут принимать значения true или false. Ни неявное, ни явное преобразование bool в числовые типы и обратно невозможно.

Тип string используется для работы со строками и является последовательностью Unicode-символов.

Тип object – это ссылочный тип, переменной которого можно присвоить любое значение.

Опишем функциональность, которой обладают пользовательские типы.

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

2. Структура – тип значения, обеспечивающий инкапсуляцию данных, но не поддерживающий наследование. Синтаксически, структура похожа на класс.

3. Интерфейс – абстрактный тип, реализуемый классами и структурами для обеспечения оговорённой функциональности.

4. Массив – пользовательский тип для представления упорядоченного набора значений.

5. Перечисление – тип, содержащий в качестве членов именованные целочисленные константы.

6. Делегат – пользовательский тип, инкапсулирующий метод.





Дата публикования: 2015-11-01; Прочитано: 411 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...