Язык программирования C#9 и платформа .NET5 - Джепикс Филипп - Страница 335
- Предыдущая
- 335/642
- Следующая
Изменить размер шрифта:
335
using System;using CommonSnappableTypes;namespace CSharpSnapIn{ [CompanyInfo(CompanyName = "FooBar", CompanyUrl = "www.FooBar.com")] public class CSharpModule : IAppFunctionality { void IAppFunctionality.DoIt() { Console.WriteLine("You have just used the C# snap-in!"); } }}Обратите внимание на явную реализацию интерфейса
IAppFunctionalityIAppFunctionalityDoIt()CSharpModuleПостроение оснастки на Visual Basic
Теперь перейдите к проекту
VBSnapInClass1.vbVBSnapIn.vbImports CommonSnappableTypes<CompanyInfo(CompanyName:="Chucky's Software", CompanyUrl:="www.ChuckySoft.com")>Public Class VBSnapIn Implements IAppFunctionality Public Sub DoIt() Implements CommonSnappableTypes.IAppFunctionality.DoIt Console.WriteLine("You have just used the VB snap in!") End SubEnd ClassКак видите, применение атрибутов в синтаксисе Visual Basic требует указания угловых скобок (
<>[]ImplementsДобавление кода для ExtendableApp
Последним обновляемым проектом является консольное приложение C# (
MyExtendableAppMyExtendableAppCommonSnappableTypesCSharpSnapIn.dllVbSnapIn.dllusingProgram.csusing System;using System.Linq;using System.Reflection;using CommonSnappableTypes;Метод
LoadExternalModule()• динамически загружает в память выбранную сборку;
• определяет, содержит ли сборка типы, реализующие интерфейс
IAppFunctionality• создает экземпляр типа, используя позднее связывание.
Если обнаружен тип, реализующий
IAppFunctionalityDoIt()DisplayCompanyData()static void LoadExternalModule(string assemblyName){ Assembly theSnapInAsm = null; try { // Динамически загрузить выбранную сборку. theSnapInAsm = Assembly.LoadFrom(assemblyName); } catch (Exception ex) { // Ошибка при загрузке оснастки Console.WriteLine($"An error occurred loading the snapin: {ex.Message}"); return; } // Получить все совместимые c IAppFunctionality классы в сборке. var theClassTypes = theSnapInAsm .GetTypes() .Where(t => t.IsClass && (t.GetInterface("IAppFunctionality") != null)) .ToList(); if (!theClassTypes.Any()) { Console.WriteLine("Nothing implements IAppFunctionality!"); // Ни один класс не реализует IAppFunctionality! } // Создать объект и вызвать метод DoIt(). foreach (Type t in theClassTypes) { /// Использовать позднее связывание для создания экземпляра типа. IAppFunctionality itfApp = (IAppFunctionality) theSnapInAsm.CreateInstance(t.FullName, true); itfApp?.DoIt(); // Отобразить информацию о компании. DisplayCompanyData(t); }}
335
- Предыдущая
- 335/642
- Следующая
Перейти на страницу:
