Framework class library что это
Сегодня мы более подробно рассмотрим, каждый из этих компонентов.
CLR
На компьютере храниться в виде файла динамической библиотеки mscoree.dll, в проекте данная сборка подключается автоматически.
Какие задачи решает CLR?
На рисунке видно, что версии среды 3.0, 3.5 — не существует. Поэтому важно понимать, что версия платформы и версия среды — это разные вещи.
CTS (Common Type System) – система общих типов.
Это детальное описание (спецификация) всех типов данных и программных конструкций, поддерживаемых исполняющей средой.
В частности описываются такие моменты, как взаимодействие между типами и их представление в формате метаданных. А так же определяет способы объявления, использования и управления типами в среде CLR, а так же обеспечивает многоязыковую поддержку.
Важно знать то, что CTS предоставляет разработчикам 5 типов. О них я уже писал ранее, но повторюсь ещё раз.
Типы: класс, интерфейс, делегат, структура, перечисление. Каждый тип может содержать любое количество членов.
Какие задачи решает CTS?
И хотя в любом языке, у каждого типа свое ключевое слово, но стоит понимать, что все они в итоге соответствуют одному и тому же типу, который храниться в сборке mscorlib.dll.
Например: в CTS описан тип Int32, который храниться в библиотеки mscorlib.dll. И хотя в языке c# он будет иметь ключевое слово int, а допустим в Visual Basic — Integer. Все эти ключевые слова, всего лишь псевдонимы, к одному и тому же типу Int32.
И ещё важно понимать, что, не смотря на то, что для c# указано ключевое слово int, мы так же можем использовать и Int32.
// int a = 5;
// System.Int32 b = 10;
CLS
Как видно из описания, понимание CLS требуется в основном разработчикам компиляторов, рядовым разработчикам данная информация вряд ли пригодиться.
В итоге мы получаем примерно вот такую структуру:
Основной или главной сборкой данной библиотеки является файл динамической библиотеки — mscorlib.dll
Данная библиотека подключается автоматически во время создания проекта, так же стоит понимать, что существуют и другие файлы сборки базовых библиотек.
Framework Class Library (FCL)
В принципе можно сказать, что Framework Class Library включает в себя библиотеку базовых классов BCL, которая, по сути, является её ядром.
.NET Framework = CLR + FCL
Такую официальную формулировку так же приводят: MSDN, Wiki и многие другие авторы книг.
Но мы знаем, что FCL включает в себя библиотеки базовых классов. И правильнее формулировка должна звучать так:
.NET Framework = CLR + Libraries (FCL, BCL)
Но тут конечно можно долго спорить.
представление базовых типов данных и исключений;
инкапсуляция структур данных;
доступ к данным о загруженных типах;
доступ к данным, предоставление графического пользовательского интерфейса на стороне клиента и управляемого сервером графического пользовательского интерфейса на стороне клиента.
Соглашения об именах
Например, пространство имен Microsoft.Word соответствует этому правилу.
Использование шаблонов именования для группировки связанных типов в пространства имен полезно при создании и документировании библиотек классов. Однако такая схема именования не влияет на видимость, доступ к членам, наследование, безопасность и привязки. Пространство имен может быть разделено между несколькими сборками, и одна сборка может содержать типы из нескольких пространств имен. Сборка представляет собой формальную структуру для управления версиями, развертывания, обеспечения безопасности, загрузки и обеспечения видимости в среде CLR.
Дополнительные сведения о пространствах имен и именах типов см. в разделе Система общих типов CTS.
Пространство имен System
Категория | Имя класса | Описание | Тип данных в Visual Basic | Тип данных в C# | Тип данных С++/CLI | Тип данных F# |
---|---|---|---|---|---|---|
Целое число | Byte | 8-разрядное целое число без знака. | Byte | byte | unsigned char | byte |
SByte | 8-битовое целое число со знаком. Не является CLS-совместимым. | SByte | sbyte | char или signed char | sbyte | |
Int16 | 16-разрядное знаковое целое число. | Short | short | short | int16 | |
Int32 | 32-разрядное знаковое целое число. | Integer | int | int или long | int | |
Int64 | 64-разрядное целое число со знаком. | Long | long | __int64 | int64 | |
UInt16 | 16-разрядное целое число без знака. Не является CLS-совместимым. | UShort | ushort | unsigned short | uint16 | |
UInt32 | 32-разрядное целое число без знака. Не является CLS-совместимым. | UInteger | uint | unsigned int или unsigned long | uint32 | |
UInt64 | 64-разрядное целое число без знака. Не является CLS-совместимым. | ULong | ulong | unsigned __int64 | uint64 | |
Число с плавающей запятой | Half | Число с плавающей запятой половинной точности (16-разрядное). | ||||
Single | Число с плавающей запятой с обычной точностью (32-разрядное). | Single | float | float | float32 или single | |
Double | Число с плавающей запятой с двойной точностью (64-разрядное). | Double | double | double | float или double | |
Logical | Boolean | Логическое значение (true или false). | Boolean | bool | bool | bool |
Другой | Char | Символ Юникода (16-разрядный). | Char | char | wchar_t | char |
Decimal | 128-разрядное десятичное значение. | Decimal | decimal | Decimal | decimal | |
IntPtr | Целое число со знаком, размер которого зависит от базовой платформы (32-разрядное значение при 32-разрядной платформе и 64-разрядное значение при 64-разрядной платформе). | nint | unativeint | |||
UIntPtr | Целое число без знака, размер которого зависит от базовой платформы (32-разрядное значение при 32-разрядной платформе и 64-разрядное значение при 64-разрядной платформе). Не является CLS-совместимым. | nuint | unativeint | |||
Object | Корень иерархии объектов. | Object | object | Object^ | obj | |
String | Неизменяемая строка символов Юникода фиксированной длины. | String | string | String^ | string |
В дополнение к базовым типам данных пространство имен System содержит более 100 классов — от классов для обработки исключений до классов, которые работают с основными механизмами среды выполнения, такими как домены приложений и сборщик мусора. Пространство имен System также содержит много пространств имен второго уровня.
.NET class library overview
Represent base data types and exceptions.
Encapsulate data structures.
Access information about loaded types.
Provide data access, rich client-side GUI, and server-controlled, client-side GUI.
Naming conventions
.NET types use a dot syntax naming scheme that connotes a hierarchy. This technique groups related types into namespaces so they can be searched and referenced more easily. The first part of the full name—up to the rightmost dot—is the namespace name. The last part of the name is the type name. For example, System.Collections.Generic.List represents the List type, which belongs to the System.Collections.Generic namespace. The types in System.Collections.Generic can be used to work with generic collections.
For example, the namespace Microsoft.Word conforms to this guideline.
The use of naming patterns to group related types into namespaces is a useful way to build and document class libraries. However, this naming scheme has no effect on visibility, member access, inheritance, security, or binding. A namespace can be partitioned across multiple assemblies and a single assembly can contain types from multiple namespaces. The assembly provides the formal structure for versioning, deployment, security, loading, and visibility in the common language runtime.
For more information on namespaces and type names, see Common Type System.
System namespace
Category | Class name | Description | Visual Basic data type | C# data type | C++/CLI data type | F# data type |
---|---|---|---|---|---|---|
Integer | Byte | An 8-bit unsigned integer. | Byte | byte | unsigned char | byte |
SByte | An 8-bit signed integer. Not CLS-compliant. | SByte | sbyte | char or signed char | sbyte | |
Int16 | A 16-bit signed integer. | Short | short | short | int16 | |
Int32 | A 32-bit signed integer. | Integer | int | int or long | int | |
Int64 | A 64-bit signed integer. | Long | long | __int64 | int64 | |
UInt16 | A 16-bit unsigned integer. Not CLS-compliant. | UShort | ushort | unsigned short | uint16 | |
UInt32 | A 32-bit unsigned integer. Not CLS-compliant. | UInteger | uint | unsigned int or unsigned long | uint32 | |
UInt64 | A 64-bit unsigned integer. Not CLS-compliant. | ULong | ulong | unsigned __int64 | uint64 | |
Floating point | Half | A half-precision (16-bit) floating-point number. | ||||
Single | A single-precision (32-bit) floating-point number. | Single | float | float | float32 or single | |
Double | A double-precision (64-bit) floating-point number. | Double | double | double | float or double | |
Logical | Boolean | A Boolean value (true or false). | Boolean | bool | bool | bool |
Other | Char | A Unicode (16-bit) character. | Char | char | wchar_t | char |
Decimal | A decimal (128-bit) value. | Decimal | decimal | Decimal | decimal | |
IntPtr | A signed integer whose size depends on the underlying platform (a 32-bit value on a 32-bit platform and a 64-bit value on a 64-bit platform). | nint | unativeint | |||
UIntPtr | An unsigned integer whose size depends on the underlying platform (a 32- bit value on a 32-bit platform and a 64-bit value on a 64-bit platform). Not CLS-compliant. | nuint | unativeint | |||
Object | The root of the object hierarchy. | Object | object | Object^ | obj | |
String | An immutable, fixed-length string of Unicode characters. | String | string | String^ | string |
In addition to the base data types, the System namespace contains over 100 classes, ranging from classes that handle exceptions to classes that deal with core runtime concepts, such as application domains and the garbage collector. The System namespace also contains many second-level namespaces.
Оглавление
В этом номере мы начнем знакомство с библиотекой классов, рассмотрим основные составляющие ее пространства имен и классы и приведем некоторые примеры их использования.
Класс Console и консольные приложения
Console.WriteLine(«.NET Console application»)
Console.ReadLine()
Методы SetIn, SetOut и SetError позволяют переопределить стандартные потоки ввода, вывода и ошибок. Эти методы ожидают аргумент типа TextWriter, который описывает поток.
Пространство имен System
Кратко рассмотрим каждый из этих методов:
Ниже мы расскажем, как используется класс Type.
Класс Type и пространство имен Reflection
Класс Type содержит методы типа GetMethods() и GetProperties(), которые могут использоваться для получения информации о членах класса. Используя классы, реализованные в пространстве имен Reflection, мы можем получать сведения, например, о параметрах методов (используя класс System.Reflection. MethodInfo) и даже вызывать методы с помощью метода Invoke().
В следующем примере показано, как начать использовать механизм отражений. Приведенный ниже код показывает, как с помощью метода GetType() получить объект Type и каким образом можно применять ряд свойств этого объекта:
Imports System
Imports System.Reflection
Dim I As Integer
Dim T As Type
T = I.GetType()
Console.WriteLine(«Name = » & T.Name)
Console.WriteLine(«Module = » & T.Module.ToString())
Console.WriteLine(«Namespace = » & T.Namespace)
Кратко рассмотрим основные возможности, предоставляемые пространством имен Reflection, а затем проиллюстрируем некоторые из них примерами.
В следующем примере показано, как получить список типов, определенных в данном модуле.
Imports System
Imports System.Reflection
Dim I As Integer
Dim T As Type
Dim Types() As Type
Dim M As [Module]
T = I.GetType()
M = T.Module
Types = M.GetTypes()
For Each T In Types
Console.WriteLine(T.FullName)
Next
Ниже показана выводимая данным кодом информация:
Imports System
Imports System.Reflection
Module Cons
Dim T As Type
Dim MI As MemberInfo
Dim Types() As Type
Dim Members() As MemberInfo
Dim M As [Module]
Dim PI As PropertyInfo
Dim PText As String
T = Type.GetType(«System.Array»)
Console.WriteLine(» <0>: <1>«, GetTypeDescription(T), T)
‘
‘ Показать все конструкторы
‘
Private Function GetTypeDescription(ByVal aType As Type) As String
Dim str As String = Nothing
If aType.IsClass Then
str = «Class»
End If
If aType.IsInterface Then
str = «Interface»
End If
If aType.IsValueType Then
str = «Struct»
End If
If aType.IsArray Then
str = «Array»
End If
Return str
End Function ‘GetTypeDescription
Ниже показана информация, выводимая нашим примером для класса System.Array:
Теперь мы знаем названия параметров и их тип:
Для того чтобы получить доступ к сборке (в нашем примере мы использовали сборку по умолчанию (- mscorlib.dll), всегда загруженную в память), надо обратиться к этой сборке. Вот как это сделать:
Imports System.Reflection
Imports System.IO
Imports Microsoft.Win32
Imports Microsoft.VisualBasic
Dim Asm As [Assembly]
Dim Mdls As [Module]()
Dim Mdl As [Module]
Asm = [Assembly].LoadFrom(GetNetFrameworkPath() + _
«system.windows.forms.dll»)
Mdls = Asm.GetModules
Mdl = Mdls(0)
Function GetNetFrameworkPath() As String
Registry.LocalMachine.OpenSubKey(«SOFTWARE\Microsoft\.NETFramework»)
GetNetFrameworkPath = CType(Key.GetValue(«InstallRoot»), String) + _
CType(Key.GetValue(«Version»), String) + «\»
После того как мы получили доступ к модулю, мы можем либо изучить определенные в нем типы (как это сделать, показано в первом примере), либо получить информацию об интересующем нам типе.
Аналогично JIT, этот компилятор также преобразует IL в машинный код. В отличие от JIT-компиляции AOT-компиляция происходит до выполнения приложения и обычно осуществляется на другом компьютере. Так как цепочки средств AOT не компилируются во время выполнения, им не нужно сокращать время, затрачиваемое на компиляцию. Это означает, что они могут тратить больше времени на оптимизацию. Так как контекстом AOT является все приложение, AOT-компилятор также выполняет межмодульное связывание и анализ всей программы. Это означает, что соблюдаются все ссылки и создается один исполняемый файл.
Модель приложения
API для конкретной рабочей нагрузки. Ниже приводится несколько примеров.
ASP.NET
Иногда ASP.NET используется как общий термин, который относится как к исходной платформе ASP.NET, так и к ASP.NET Core. Значение термина в заданном экземпляре определяется контекстом. Обратитесь к ASP.NET 4.x в тех ситуациях, когда важно избежать путаницы, поскольку термин ASP.NET может относиться к обеим реализациям.
ASP.NET Core
Кроссплатформенная, высокопроизводительная, основанная на открытом исходном коде реализация ASP.NET.
сборка
Файл .dll или .exe, который содержит коллекцию API-интерфейсов, вызываемых приложениями или другими сборками.
Сборка может включать разные типы, например интерфейсы, классы, структуры, перечисления и делегаты. Сборки в папке bin проекта иногда называют двоичными файлами. См. также библиотека.
Библиотека базовых классов.
Набор библиотек, которые составляют пространства имен System.* (и в некоторой степени Microsoft.*). BCL — это универсальная платформа низкого уровня, которая является основой платформ приложений более высокого уровня, например ASP.NET Core.
Следующие термины часто относятся к одной коллекции API, которая называется BCL:
Общеязыковая среда выполнения.
Среда CLR обрабатывает выделение памяти и управление ею. Среда CLR также является виртуальной машиной, которая не только выполняет приложения, но и создает, а также компилирует код с помощью JIT-компилятора.
Core CLR
CoreRT
В отличие от среды CLR CoreRT не является виртуальной машиной, поэтому она не включает средства для создания и выполнения кода «на лету», так как в ней отсутствует JIT. Но она поддерживает сборку мусора и возможности идентификации типа среды выполнения (RTTI) и отражения. Ее система типов разработана таким образом, что метаданные для отражения не требуется. Отсутствие необходимости в метаданных обеспечивает наличие цепочки инструментов AOT, которая может связать лишние метаданные и (что более важно) определить код, который приложение не использует. CoreRT находится в разработке.
кроссплатформенный
Возможность разрабатывать и выполнять приложение, которое можно использовать в разных операционных системах, например в Linux, Windows и iOS, без необходимости переписывать его специально для каждой из них. Это позволяет повторно использовать код и обеспечивает согласованность приложений на разных платформах.
экосистема
Все программное обеспечение среды выполнения, средства разработки и ресурсы сообщества, которые используются для построения и запуска приложений для заданной технологии.
платформа
Обычно это всеобъемлющая коллекция API-интерфейсов, которая упрощает разработку и развертывание приложений, основанных на определенной технологии. В этом общем смысле ASP.NET Core и Windows Forms являются примерами платформ приложений. Слова «платформа» и библиотека часто используются как синонимы.
Слово «платформа» имеет разное значение в следующих терминах.
Библиотеки платформы
Сборка мусора
Сборщик мусора является реализацией автоматического управления памятью. Сборщик мусора освобождает память, занятую объектами, которые больше не используются.
Аналогично AOT, этот компилятор преобразует IL в машинный код, который понимает обработчик. В отличие от AOT, JIT-компиляция происходит по требованию и осуществляется на том же компьютере, где должен выполняться код. Так как JIT-компиляция происходит во время выполнения приложения, время компиляции является частью времени выполнения. Таким образом, JIT-компиляторы должны поддерживать баланс между временем оптимизации кода и экономии, к которой может привести к результирующий код. Но JIT знает фактическое оборудование и может освободить разработчиков от поставки различных реализаций.
библиотека
Слова «библиотека» и платформа часто используются как синонимы.
Mono обычно используется с JIT-компилятором, но также располагает полным статическим компилятором (заблаговременная компиляция), который используется на таких платформах, как iOS.
«.NET» всегда пишется полностью прописными буквами. Написание «.Net» не используется.
.NET 5 и более поздних версий
Интерфейс командной строки.NET
.NET Core
.NET Framework
.NET Native
Цепочка инструментов компилятора, которая создает машинный код в режиме AOT в отличие от режима JIT.
Компиляция происходит на компьютере разработчика, аналогично тому, как работает компилятор и компоновщик C++. Она удаляет неиспользуемый код и тратит больше времени на его оптимизацию. Она извлекает код из библиотек и объединяет их в исполняемый файл. Результатом является один модуль, который представляет все приложение.
.NET Standard
Создание образов в машинном коде.
Эту технологию можно считать постоянным JIT-компилятором. Как правило, он компилирует код на компьютере, где код выполняется. Но компиляция обычно происходит во время установки.
пакет
Пакет NuGet —, или просто «пакет»—, — это ZIP-файл, содержащий одну или несколько сборок с одинаковым именем, а также дополнительные метаданные, такие как имя автора.
ZIP-файл имеет расширение .nupkg и может содержать ресурсы, такие как файлы .dll и .xml для нескольких целевых платформ и версий. При установке в приложении или библиотеке выбор соответствующих ресурсов осуществляется в зависимости от целевой платформы, указанной приложением или библиотекой. Ресурсы, которые определяют интерфейс, находятся в папке ref, а ресурсы, которые определяют реализацию, находятся в папке lib.
platform
Операционная система и оборудование, на котором она выполняется, например Windows, macOS, Linux, iOS и Android.
Ниже приведены примеры использования в предложениях.
исполняющая среда
Словосочетание «среда выполнения» имеет разное значение в некоторых контекстах:
Относится к тем же библиотекам, что и BCL. Однако другие среды выполнения, например среда выполнения ASP.NET Core, имеют разные общие платформы с дополнительными библиотеками, которые создаются на основе BCL.
Общая платформа
Существуют и другие общие платформы. Общая платформа ASP.NET Core ссылается на библиотеки, включенные в среду выполнения ASP.NET Core, которые включают BCL и дополнительные API для использования веб-приложениями.
Для приложений, зависящих от платформы, общая платформа состоит из библиотек, которые содержатся в сборках, установленных в папке на компьютере, где выполняется приложение. Для автономных приложений сборки общих платформ включаются в приложение.
Набор программных технологий, которые используются совместно для сборки и запуска приложений.
целевая платформа
Моникер целевой платформы.
Универсальная платформа Windows.
workload
В некоторых контекстах под рабочей нагрузкой понимается коллекция функций Visual Studio, которые можно установить для поддержки определенного типа приложения. См. пример в разделе Выбор рабочей нагрузки.