Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 331 332 333 334 335 336 337 338 339 ... 642
Перейти на страницу:

using System;

using CommonSnappableTypes;

namespace CSharpSnapIn

{

  [CompanyInfo(CompanyName = &quot;FooBar&quot;, CompanyUrl = &quot;www.FooBar.com&quot;)]

  public class CSharpModule : IAppFunctionality

  {

    void IAppFunctionality.DoIt()

    {

      Console.WriteLine(&quot;You have just used the C# snap-in!&quot;);

    }

  }

}

Обратите внимание на явную реализацию интерфейса IAppFunctionality (см. главу 8). Поступать так необязательно; тем не менее, идея заключается в том, что единственной частью системы, которая нуждается в прямом взаимодействии с упомянутым интерфейсным типом, будет размещающее приложение. Благодаря явной реализации интерфейса IAppFunctionality метод DoIt() не доступен напрямую из типа CSharpModule.

Построение оснастки на Visual Basic

Теперь перейдите к проекту VBSnapIn. Удалите файл Class1.vb и добавьте новый файл по имени VBSnapIn.vb. Код Visual Basic столь же прост:

Imports CommonSnappableTypes

&lt;CompanyInfo(CompanyName:=&quot;Chucky's Software&quot;, CompanyUrl:=&quot;www.ChuckySoft.com&quot;)&gt;

Public Class VBSnapIn

  Implements IAppFunctionality

  Public Sub DoIt() Implements CommonSnappableTypes.IAppFunctionality.DoIt

    Console.WriteLine(&quot;You have just used the VB snap in!&quot;)

  End Sub

End Class

Как видите, применение атрибутов в синтаксисе Visual Basic требует указания угловых скобок (&lt;&gt;), а не квадратных ([]). Кроме того, для реализации интерфейсных типов заданным классом или структурой используется ключевое слово Implements.

Добавление кода для ExtendableApp

Последним обновляемым проектом является консольное приложение C# (MyExtendableApp). После добавления к решению консольного приложения MyExtendableApp и установки его как стартового проекта добавьте ссылку на проект CommonSnappableTypes, но не на CSharpSnapIn.dll или VbSnapIn.dll. Модифицируйте операторы using в начале файла Program.cs, как показано ниже:

using System;

using System.Linq;

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

using System.Reflection;

using CommonSnappableTypes;

Метод LoadExternalModule() выполняет следующие действия:

• динамически загружает в память выбранную сборку;

• определяет, содержит ли сборка типы, реализующие интерфейс IAppFunctionality;

• создает экземпляр типа, используя позднее связывание.

Если обнаружен тип, реализующий IAppFunctionality, тогда вызывается метод DoIt() и найденный тип передается методу DisplayCompanyData() для вывода дополнительной информации о нем посредством рефлексии.

static void LoadExternalModule(string assemblyName)

{

  Assembly theSnapInAsm = null;

  try

  {

    // Динамически загрузить выбранную сборку.

    theSnapInAsm = Assembly.LoadFrom(assemblyName);

  }

  catch (Exception ex)

  {

    // Ошибка при загрузке оснастки

    Console.WriteLine($&quot;An error occurred loading the snapin: {ex.Message}&quot;);

    return;

  }

  // Получить все совместимые c IAppFunctionality классы в сборке.

  var theClassTypes = theSnapInAsm

      .GetTypes()

      .Where(t =&gt; t.IsClass &amp;&amp; (t.GetInterface(&quot;IAppFunctionality&quot;) != null))

      .ToList();

  if (!theClassTypes.Any())

  {

    Console.WriteLine(&quot;Nothing implements IAppFunctionality!&quot;);

                 // Ни один класс не реализует IAppFunctionality!

  }

  // Создать объект и вызвать метод DoIt().

  foreach (Type t in theClassTypes)

  {

    /// Использовать позднее связывание для создания экземпляра типа.

    IAppFunctionality itfApp =

        (IAppFunctionality) theSnapInAsm.CreateInstance(t.FullName, true);

    itfApp?.DoIt();

    // Отобразить информацию о компании.

    DisplayCompanyData(t);

  }

}

1 ... 331 332 333 334 335 336 337 338 339 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга