#.
using System;
public class MyApp
{
static void Main()
{
Console.WriteLine("Hi from C#");
}
}
' Приложение "Hello World" на языке VB.
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, сгруппированные по функциональности.
Доступ к пространству имен программным образом
Полезно снова повторить, что пространство имен — всего лишь удобный способ логической организации связанных типов, содействующий их пониманию. Давайте еще раз обратимся к пространству имен 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, по-прежнему располагают доступом к библиотекам СОМ, что тоже рассматривается позже в книге.
Чтобы сборка имела доступ к другой сборке, которую строите вы (или кто-то другой), необходимо добавить ссылку из вашей сборки на другую сборку и обладать физическим доступом к этой другой сборке. В зависимости от инструмента разработки, применяемого для построения приложений .NET Core, вам будут доступны различные способы информирования компилятора о том, какие сборки должны включаться в цикл компиляции.
Исследование сборки с помощью ildasm.exe
Если вас начинает беспокоить мысль о необходимости освоения всех пространств имен .NET Core, то просто вспомните о том, что уникальность пространству имен придает факт наличия в нем типов, которые каким-то образом семантически связаны. Следовательно, если в качестве пользовательского интерфейса достаточно простого консольного режима, то можно вообще не думать о пространствах имен, предназначенных для построения интерфейсов настольных и веб-приложений. Если вы создаете приложение для рисования, тогда вам вряд ли понадобятся пространства имен, ориентированные на работу с базами данных. Со временем вы изучите те пространства имен, которые больше всего соответствуют вашим потребностям в программировании.
Утилита ildasm.exe
(Intermediate Language Disassembler — дизассемблер промежуточного языка) дает возможность загрузить любую сборку .NET Core и изучить ее содержимое, включая ассоциированный с ней манифест, код CIL и метаданные типов. Инструмент ildasm.exe
позволяет программистам более подробно разобраться, как их код C# отображается на код CIL, и в итоге помогает понять внутреннюю механику функционирования .NET Core. Хотя для того, чтобы стать опытным программистом приложений .NET Core, использовать ildasm.exe
вовсе не обязательно, настоятельно рекомендуется время от времени применять данный инструмент, чтобы лучше понимать, каким образом написанный код C# укладывается в концепции исполняющей среды.
На заметку! Утилита ildasm.exe
не поставляется с исполняющей средой .NET 5. Получить этот инструмент в свое распоряжение можно двумя способами. Первый способ предусматривает его компиляцию из исходного кода исполняющей среды .NET 5, который доступен по ссылке https://github.com/dotnet/runtime
. Второй и более простой способ — получить пакет NuGet по ссылке https://www.nuget.org/packages/Microsoft.NETCore.iLDAsm/
. Удостоверьтесь в том, что выбираете корректную версию (для книги понадобится версия 5.0.0 или выше). Добавьте пакет ILdasm
в свой проект с помощью команды dotnet add package Microsoft .NETCore.ILDAsm --version 5.0.0
. На самом деле команда не загружает ILDasm.exe
в ваш проект, а помещает его в папку пакета (на компьютере Windows): %userprofile%.nugetpackagesmicrosoft.netcore.ildasm5.0.0runtimesnative
.
Утилита ILDasm.exe
версии 5.0.0 также включена в папку Chapter_01
(и в папки для других глав, где применяется ILDasm.exe
) хранилища GitHub для данной книги.
После загрузки утилиты ildasm.exe
на свой компьютер вы можете запустить ее из командной строки и просмотреть справочную информацию. Чтобы извлечь код CIL, понадобится указать как минимум имя сборки.
Вот пример команды:
ildasm /all