В отличие от традиционного кода на C и C++, код C# не компилируется непосредственно в машинный язык. Компилятор C# преобразует исходный код C# в код на промежуточном языке IL (MIcrosoft Intermediate Language). Файлы IL (или сокращенно IL) называются сборками. Файлы IL создаются всеми языками на основе общеязыковой среды выполнения CLR (CLR – Common Language Runtime). Среда CLR поддерживает языки Visual C#, Visual C++, Visual J# и Visual Basic. Созданные файлы IL в большинстве случаев практически идентичны во многих языках, что упрощает сочетание различных программных компонентов, написанных на разных языках.
На следующей схеме показано преобразование написанного кода C# в исполняемое приложение.
Файлы CIL отображаются в виде стандартных файлов EXE или DLL, однако вместо выполнения непосредственно на платформе Windows, они выполняются средой CLR. При необходимости CLR компилирует программу IL в машинный код. Данный процесс называется JIT-компиляцией (JIT – Just in Time). Затем происходит прямое выполнение этого кода. В исполняемый код включаются ссылки на подпрограммы, содержащиеся в сборках (иначе, динамически подключаемых библиотеках DLL) платформы .NET Framework. Чтобы они работали, на компьютере должна быть установлена платформа .NET Framework.
За счет создания промежуточного, независимого от оборудования кода, который не преобразуется в машинный код вплоть до последнего момента, повышается надежность, безопасность и переносимость. Большая часть этого процесса скрыта от программистов: программы C# компилируются, выполняются и распространяются так же, как и другие. Пока на компьютере установлена платформа .NET Framework, программа C# будет выполняться подобно любому другому приложению.
Файлы CIL имеют расширение .exe. Однако фактически это исходники. Если их нужно разворачивать на компьютере без платформы .NET Framework, то требуется формировать настоящий исполняемый файл, используя специальные процедуры.
Возможности платформы .NET Framework упорядочены по пространствам имен, каждое из которых обычно содержит несколько классов. Например, пространство имен System.IO содержит много классов для чтения и записи файлов, а пространство имен System.Text включает классы для обработки строковых данных. Просмотрите справочную документацию по библиотеке классов .NET Framework, чтобы получить представление о различных пространствах имен и их содержимом.
Использование LINQ в C#
В приложениях часто используются данные из баз данных SQL или XML-документов. Традиционно, разработчики должны были изучить как основной язык программирования, такой как C#, так и дополнительный, например SQL или XQuery. Технология встроенного в язык запроса LINQ (Language-Integrated Query) предоставляет возможность осуществлять запросы на самом языке C#.
Теперь, вместо изучения отдельного языка запросов, можно выполнять запросы к базам данных SQL, наборам данных ADO.NET, XML-документам и любым классам коллекций .NET Framework, реализующих интерфейс IEnumerable, используя знание C# и нескольких дополнительных ключевых слов и основных понятий.