Пошаговое руководство. Реализация наследования с использованием COM-объектов (Visual Basic)
Создавать производные классы Visual Basic можно из классов Public в объектах COM, в том числе из классов, созданных в более ранних версиях Visual Basic. Свойства и методы классов, унаследованных от объектов COM, могут быть переопределены или перегружены таким же образом, как свойства и методы любого другого базового класса. Наследование от объектов COM используется, если уже созданную библиотеку классов не требуется перекомпилировать.
Далее показано, как с помощью Visual Basic 6.0 создать объект COM, содержащий класс, а затем использовать его в качестве базового класса.
Примечание
На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.
Чтобы построить объект COM, используемый в данном пошаговом руководстве
Откройте в Visual Basic 6.0 новый проект ActiveX DLL. Создается проект с именем Project1. Он имеет класс с именем Class1.
В Обозревателе проекта щелкните правой кнопкой мыши Project1 и нажмите кнопку Свойства Project1. Появится диалоговое окно Свойства проекта.
На вкладке Общие диалогового окна Свойства проекта измените имя проекта, введя ComObject1 в поле Название проекта.
В Обозревателе проекта щелкните правой кнопкой мыши Class1 и нажмите кнопку Свойства. Появится окно Свойства для класса.
Измените свойство Name на MathFunctions.
В Обозревателе проекта щелкните MathFunctions правой кнопкой мыши и нажмите кнопку Перейти к коду. Отображается Редактор кода.
Создайте локальную переменную для хранения значения свойства:
' Local variable to hold property value Private mvarProp1 As Integer
Добавьте процедуры свойства Property Let и Property Get:
Public Property Let Prop1(ByVal vData As Integer) 'Used when assigning a value to the property. mvarProp1 = vData End Property Public Property Get Prop1() As Integer 'Used when retrieving a property's value. Prop1 = mvarProp1 End Property
Добавьте функцию:
Function AddNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer AddNumbers = SomeNumber + AnotherNumber End Function
Создайте и зарегистрируйте объект COM, щелкнув Создать ComObject1.dll в меню Файл.
Примечание
Хотя пользователь может предоставить класс, созданный в Visual Basic как объект COM, он не является истинным объектом COM и не может быть использован в этом пошаговом руководстве.Дополнительные сведения см. в разделе COM-взаимодействие в приложениях .NET Framework (Visual Basic).
Сборки взаимодействия
В данной процедуре описано, как создать сборку взаимодействия, которая действует в качестве моста между неуправляемым кодом (таким как объект COM) и управляемым кодом, который использует Visual Studio. Созданная Visual Basic сборка взаимодействия обеспечивает различные аспекты работы с COM-объектами, например маршалинг взаимодействия, процесс упаковки параметров и возврат значений в эквивалентные типы данных при передаче COM-объектам и получении из них. Ссылка в приложении Visual Basic обращается к сборке взаимодействия, а не к самому объекту COM.
Использование COM-объекта в Visual Basic 2005 и более поздних версиях
Откройте новый проект приложения Windows в Visual Basic.
В меню Проект щелкните команду Добавить ссылку.
Появится диалоговое окно Добавление ссылки.
На вкладке COM дважды щелкните ComObject1 в списке Имя компонента и нажмите кнопку OK.
В меню Проект выберите команду Добавить новый элемент.
Откроется диалоговое окно Добавление нового элемента.
В области Шаблоны щелкните Класс.
Имя файла по умолчанию — Class1.vb — отображается в поле Имя. Измените значение поля на MathClass.vb и нажмите кнопку Добавить. Создается класс с именем MathClass, а его код отображается на экране.
Добавьте следующий код в верхнюю часть MathClass для наследования от класса COM.
' The inherited class is called MathFunctions in the base class, ' but the interop assembly appends the word Class to the name. Inherits ComObject1.MathFunctionsClass
Перегрузите открытый метод базового класса, добавив следующий код к MathClass:
' This method overloads the method AddNumbers from the base class. Overloads Function AddNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer Return SomeNumber + AnotherNumber End Function
Расширьте наследуемый класс, добавив следующий код к MathClass:
' The following function extends the inherited class. Function SubtractNumbers( ByVal SomeNumber As Integer, ByVal AnotherNumber As Integer) As Integer Return AnotherNumber - SomeNumber End Function
Новый класс наследует свойства базового класса в объекте COM, перегружает метод и определяет новый метод для расширения класса.
Чтобы проверить унаследованный класс
Добавьте кнопку на начальной форме, а затем дважды щелкните ее, чтобы просмотреть ее код.
В процедуре обработки события Click добавьте следующий код для создания экземпляра MathClass и вызовите перегруженные методы:
Dim Result1 As Short Dim Result2 As Integer Dim Result3 As Integer Dim MathObject As New MathClass Result1 = MathObject.AddNumbers(4S, 2S) ' Add two Shorts. Result2 = MathObject.AddNumbers(4, 2) 'Add two Integers. Result3 = MathObject.SubtractNumbers(2, 4) ' Subtract 2 from 4. MathObject.Prop1 = 6 ' Set an inherited property. MsgBox("Calling the AddNumbers method in the base class " & "using Short type numbers 4 and 2 = " & Result1) MsgBox("Calling the overloaded AddNumbers method using " & "Integer type numbers 4 and 2 = " & Result2) MsgBox("Calling the SubtractNumbers method " & "subtracting 2 from 4 = " & Result3) MsgBox("The value of the inherited property is " & MathObject.Prop1)
Запустите проект, нажав клавишу F5.
При нажатии кнопки на форме метод AddNumbers сначала вызывается с номерами типом данных Short, и Visual Basic выбирает соответствующий метод из базового класса. Второй вызов AddNumbers направляется в перегруженный метод из MathClass. Третий вызов вызывает метод SubtractNumbers, который расширяет класс. Задается свойство в базовом классе, и отображается значение.
Следующие действия
Обратите внимание на то, что перегруженная функция AddNumbers требует тот же тип данных, что и метод, унаследованный от базового класса COM-объекта. Причина в том, что в Visual Basic 6.0 аргументы и параметры метода базового класса определены как 16-разрядные целые значения, а в последующих версиях Visual Basic они представлены как 16-разрядные целые значения типа Short. Новая функция поддерживает 32-разрядные целые значения и перегружает функцию базового класса.
При работе с объектами COM убедитесь в правильности размера и типов данных параметров. Например, при использовании объекта COM, который поддерживает объект коллекции Visual Basic 6.0 как аргумент, невозможно использовать коллекцию последней версии Visual Basic .NET.
Свойства и методы, унаследованные из классов COM, могут быть переопределены. Иными словами, можно объявить локальное свойство или метод, которые заменяют свойство или метод, унаследованные от базового класса COM. Правила переопределения унаследованных свойств COM аналогичны правилам переопределения других свойств и методов со следующими исключениями:
Если переопределяются унаследованные из класса COM свойства или методы, необходимо переопределить все остальные унаследованные свойства и методы.
Свойства, использующие параметры ByRef, не могут быть переопределены.
См. также
Ссылки
Тип данных Short (Visual Basic)
Другие ресурсы
COM-взаимодействие в приложениях .NET Framework (Visual Basic)