|
|
@@ -18,9 +18,9 @@
|
|
|
|
|
|
<!-- https://metanit.com/sharp/tutorial/14.3.php -->
|
|
|
|
|
|
-* [Создание](#Создание)
|
|
|
-* [Подключение](#Подключение)
|
|
|
-* [Динамическая загрузка сборок и позднее связывание](#Динамическая-загрузка-сборок-и-позднее-связывание)
|
|
|
+* [Создание](#создание)
|
|
|
+* [Подключение](#подключение)
|
|
|
+* [Динамическая загрузка сборок и позднее связывание](#динамическая-загрузка-сборок-и-позднее-связывание)
|
|
|
|
|
|
Нередко различные классы и структуры оформляются в виде отдельных библиотек, которые компилируются в файлы **dll** и затем могут подключать в другие проекты. Благодаря этому мы можем определить один и тот же функционал в виде библиотеки классов и подключать в различные проекты или передавать на использование другим разработчикам.
|
|
|
|
|
|
@@ -28,30 +28,27 @@
|
|
|
|
|
|
1. Возьмем имеющийся проект приложения .NET, например, созданный в прошлых темах.
|
|
|
|
|
|
- 
|
|
|
-
|
|
|
Запомним какую платформу (**.NET Core** или **.NET Framefork**) и версию .NET используем.
|
|
|
|
|
|
Например, в моем случае **.NET Core** версии `net8.0`
|
|
|
|
|
|
|
|
|
-1. В структуре проекта нажмем правой кнопкой на название решения и далее в появившемся контекстном меню выберем **Add -> New Project...**
|
|
|
-
|
|
|
- 
|
|
|
+1. В структуре проекта нажмем правой кнопкой на название решения и далее в появившемся контекстном меню выберем **Добавить -> Создать проект...**
|
|
|
|
|
|
-1. Далее в списке шаблонов найдем пункт **Class Library**. Будьте внимательны, в списке шаблонов несколько вариантов "Библиотек классов" под разные платформы. Создаваемая библиотека классов должна соответсвовать платформе и версии проекта, к которому её планируется подключать:
|
|
|
+1. Далее в списке шаблонов найдем пункт **Библиотека классов (Майкрософт)**. Будьте внимательны, в списке шаблонов несколько вариантов "Библиотек классов" под разные платформы. Создаваемая библиотека классов должна соответсвовать платформе и версии проекта, к которому её планируется подключать:
|
|
|
|
|
|
- 
|
|
|
+ 
|
|
|
|
|
|
+1. В окне настройки можете задать имя проекта (обычно оно прописано в ТЗ)
|
|
|
|
|
|
-1. После создания проекта он появится в решении, в моем случае с названием `ClassLibrary1`:
|
|
|
+ 
|
|
|
|
|
|
- 
|
|
|
+1. После создания проекта он появится в решении, в моем случае с названием `ClassLibrary1`
|
|
|
|
|
|
1. По умолчанию новый проект имеет один пустой класс **Class1** в файле `Class1.cs`. Мы можем этот файл удалить или переименовать, как нам больше нравится.
|
|
|
|
|
|
```cs
|
|
|
- namespace ClassLibrary;
|
|
|
+ namespace ClassLibrary1;
|
|
|
|
|
|
public class Class1
|
|
|
{
|
|
|
@@ -72,21 +69,21 @@
|
|
|
>
|
|
|
>IDE может создать класс без модификатора **public** - установите его, иначе не сможете использовать этот класс в других проектах.
|
|
|
|
|
|
- Теперь скомпилируем библиотеку классов. Для этого нажмём правой кнопкой на проект библиотеки классов и в контекстном меню выберем пункт **Build Selected Projects**.
|
|
|
+ Теперь скомпилируем библиотеку классов. Для этого нажмём правой кнопкой на проект библиотеки классов и в контекстном меню выберем пункт **Собрать**.
|
|
|
|
|
|
- После компиляции библиотеки классов в папке проекта в каталоге `bin/Debug` мы сможем найти скомпилированный файл ***dll*** (`ClassLibrary.dll`).
|
|
|
+ После компиляции библиотеки классов в папке проекта в каталоге `bin/Debug/net8.0` мы сможем найти скомпилированный файл ***dll*** (`ClassLibrary1.dll`).
|
|
|
|
|
|
- 
|
|
|
+ 
|
|
|
|
|
|
## Подключение
|
|
|
|
|
|
-Подключим созданную библиотеку классов в основной проект. Для этого в основном проекте нажмем правой кнопкой на **Dependencies** (Зависимости) и в контекстном меню выберем пункт **Reference...**:
|
|
|
+Подключим созданную библиотеку классов в основной проект. Для этого в основном проекте нажмем правой кнопкой на **Зависимости** и в контекстном меню выберем пункт **Добавить ссылку на проект**:
|
|
|
|
|
|
-Далее нам откроется окно для добавления зависимостей. Если Вы всё сделали правильно (библиотека находится в том же решении) то в этом будет пункт **Projects** со списком проектов в решениии, среди которых будет ваша библиотека (в моём случае `<ClassLibrary1>`).Поставим отметку рядом с нашей библиотекой.
|
|
|
+Далее нам откроется окно для добавления зависимостей. Если Вы всё сделали правильно (библиотека находится в том же решении) то в этом будет пункт **Проекты** со списком проектов в решениии, среди которых будет ваша библиотека (в моём случае `ClassLibrary1`). Поставим отметку рядом с нашей библиотекой.
|
|
|
|
|
|
-
|
|
|
+
|
|
|
|
|
|
-Если наша библиотека вдруг представляет файл **dll**, который не связан ни с каким проектом в нашем решении, то с помощью кнопки **Add From** мы можем найти местоположение файла **dll** и также его подключить.
|
|
|
+Если наша библиотека вдруг представляет файл **dll**, который не связан ни с каким проектом в нашем решении, то с помощью кнопки **Обзор** мы можем найти местоположение файла **dll** и также его подключить.
|
|
|
|
|
|
После успешного подключения библиотеки в главном проекте изменим код, чтобы он использовал класс **Person** из библиотеки классов:
|
|
|
|
|
|
@@ -100,8 +97,6 @@ var tom = new Person {
|
|
|
Console.WriteLine(tom.name);
|
|
|
```
|
|
|
|
|
|
-
|
|
|
-
|
|
|
Такое подключение библиотек назвается статическим.
|
|
|
|
|
|
## Динамическая загрузка сборок и позднее связывание
|
|
|
@@ -110,11 +105,6 @@ Console.WriteLine(tom.name);
|
|
|
|
|
|
Но также мы можем сами динамически подгружать другие сборки, на которые в проекте нет ссылок.
|
|
|
|
|
|
->Чтобы не делать новых библиотек, мы можем удалить ссылку на уже добавленную:
|
|
|
->
|
|
|
->
|
|
|
-
|
|
|
-
|
|
|
Для управления сборками в пространстве имен **System.Reflection** имеется класс **Assembly**. С его помощью можно загружать сборку, исследовать ее.
|
|
|
|
|
|
Чтобы динамически загрузить сборку в приложение, надо использовать статические методы *Assembly.LoadFrom()* или *Assembly.Load()*.
|
|
|
@@ -178,8 +168,6 @@ Process finished with exit code 0.
|
|
|
|
|
|
#### Получение типа
|
|
|
|
|
|
-
|
|
|
-
|
|
|
Чтобы управлять типом и получать всю информацию о нем, нам надо сперва получить данный тип. Это можно сделать тремя способами: с помощью ключевого слова **typeof**, с помощью метода *GetType()* класса **Object** и применяя статический метод *Type.GetType()*.
|
|
|
|
|
|
* Получение типа через **typeof**:
|