Инфраструктура .NET Core предлагает еще одну исполняющую среду. Основное отличие исполняющей среды .NET Core от упомянутых выше сред заключается в том, что исполняющая среда .NET Core обеспечивает единый четко определенный уровень выполнения, который разделяется всеми языками и платформами, ориентированными на .NET Core.
Различия между сборкой пространством имен и типом
Любой из нас понимает важность библиотек кода. Главное назначение библиотек платформы — предоставлять разработчикам четко определенный набор готового кода, который можно задействовать в создаваемых приложениях. Однако C# не поставляется с какой-то специфичной для языка библиотекой кода. Взамен разработчики на С# используют нейтральные к языкам библиотеки .NET Core. Для поддержания всех типов внутри библиотек базовых классов в организованном виде внутри .NET Core широко применяется концепция пространств имен.
Пространство имен — это группа семантически родственных типов, которые содержатся в одной или нескольких связанных друг с другом сборках. Например, пространство имен System.IO содержит типы, относящиеся к файловому вводу-выводу, пространство имен System.Data — типы для работы с базами данных и т.д. Важно понимать, что одна сборка может содержать любое количество пространств имен, каждое из которых может иметь любое число типов.
Основное отличие между таким подходом и специфичной для языка библиотекой заключается в том, что любой язык, ориентированный на исполняющую среду .NET Core, использует те же самые пространства имен и те же самые типы. Например, следующие две программы представляют собой вездесущее приложение "Hello World", написанное на языках C# и VB:
<b>// Приложение "Hello World" на языке С #.</b>
using System;
public class MyApp
{
static void Main()
{
Console.WriteLine("Hi from C#");
}
}
<b>' Приложение "Hello World" на языке VB.</b>
Imports System
Public Module MyApp
Sub Main()
Console.WriteLine("Hi from VB")
End Sub
End Module
Обратите внимание, что во всех языках применяется класс Console, определенный в пространстве имен System. Помимо очевидных синтаксических различий представленные приложения выглядят довольно похожими как физически, так и логически.
Понятно, что после освоения выбранного языка программирования для .NET Core вашей следующей целью как разработчика будет освоение изобилия типов, определенных в многочисленных пространствах имен .NET Core. Наиболее фундаментальное пространство имен, с которого нужно начать, называется System. Оно предлагает основной набор типов, которые вам как разработчику в .NET Core придется задействовать неоднократно. Фактически без добавления, по крайней мере, ссылки на пространство имен System построить сколько-нибудь функциональное приложение C# невозможно, т.к. в System определены основные типы данных (например, System.Int32 и System.String). В табл. 1.3 приведены краткие описания некоторых (конечно же, не всех) пространств имен .NET Core, сгруппированные по функциональности.
(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})
Доступ к пространству имен программным образом
Полезно снова повторить, что пространство имен — всего лишь удобный способ логической организации связанных типов, содействующий их пониманию. Давайте еще раз обратимся к пространству имен System. С точки зрения разработчика можно предположить, что конструкция System.Console представляет класс по имени Console, который содержится внутри пространства имен под названием System. Однако с точки зрения исполняющей среды .NET Core это не так. Исполняющая среда видит только одиночный класс по имени System.Console.
В языке C# ключевое слово using упрощает процесс ссылки на типы, определенные в отдельном пространстве имен. Давайте посмотрим, каким образом оно работает. В приведенном ранее примере Calc в начале файла находится единственный оператор using:
using System;
Он делает возможной следующую строку кода:
Console.WriteLine ("10 + 84 is {0}." , ans);
Без оператора using пришлось бы записывать так:
System.Console.WriteLine ("10 + 84 is {0}.", ans);
Хотя определение типа с использованием полностью заданного имени позволяет делать код более читабельным, трудно не согласиться с тем, что применение ключевого слова using в C# значительно сокращает объем набора на клавиатуре. В настоящей книге полностью заданные имена в основном использоваться не будут (разве что для устранения установленной неоднозначности), а предпочтение отдается упрощенному подходу с применением ключевого слова using.
Однако не забывайте о том, что ключевое слово using — просто сокращенный способ указать полностью заданное имя типа. Любой из подходов дает в результате тот же самый код CIL (учитывая, что в коде CIL всегда используются полностью заданные имена) и не влияет ни на производительность, ни на размер сборки.
Ссылка на внешние сборки
В предшествующих версиях .NET Framework для установки библиотек инфраструктуры применялось общее местоположение, известное как глобальный кеш сборок (Global Assembly Cache — GAC). Инфраструктура .NET Core не использует GAC. Взамен каждая версия (включая младшие выпуски) устанавливается в собственное местоположение на компьютере (согласно версии). В среде Windows каждая версия исполняющей среды и SDK устанавливаются в с:Program Filesdotnet.
В большинстве проектов .NET Core сборки добавляются путем добавления пакетов NuGet (раскрываются позже в книге). Тем не менее, приложения .NET Core, нацеленные и разрабатываемые в среде Windows, по-прежнему располагают доступом к библиотекам СОМ, что тоже рассматривается позже в книге.