Пошаговое руководство. Реализация наследования с использованием COM-объектов (Visual Basic)
Классы Visual Basic можно наследить из Public
классов в COM-объектах, даже тех, которые созданы в более ранних версиях Visual Basic. Свойства и методы классов, унаследованных от com-объектов, можно переопределить или перезагрузить так же, как свойства и методы любого другого базового класса могут быть переопределены или перегружены. Наследование от COM-объектов полезно при наличии существующей библиотеки классов, которую не требуется перекомпилировать.
В следующей процедуре показано, как использовать Visual Basic 6.0 для создания COM-объекта, содержащего класс, а затем использовать его в качестве базового класса.
Примечание.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Создание COM-объекта, используемого в этом пошаговом руководстве
В Visual Basic 6.0 откройте новый проект БИБЛИОТЕКи DLL ActiveX. Создается проект
Project1
. Он имеет класс с именемClass1
.В Обозреватель проекта щелкните правой кнопкой мыши Project1 и выберите пункт "Свойства Project1". Откроется диалоговое окно "Свойства проекта".
На вкладке "Общие" диалогового окна "Свойства проекта" измените имя проекта, введя
ComObject1
в поле "Имя проекта".В Обозреватель проекта щелкните правой кнопкой мыши
Class1
и выберите пункт "Свойства". Откроется окно "Свойства" для класса.Измените значение свойства
Name
наMathFunctions
.В Обозреватель проекта щелкните правой кнопкой мыши
MathFunctions
и выберите команду "Просмотреть код". Отображается редактор кода.Добавьте локальную переменную для хранения значения свойства:
' Local variable to hold property value Private mvarProp1 As Integer
Добавление процедур свойств
Let
и свойств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.
Сборки взаимодействия
В следующей процедуре вы создадите сборку взаимодействия, которая выступает в качестве моста между неуправляемым кодом (например, com-объектом) и использует управляемый код Visual Studio. Сборка взаимодействия, которая создает Visual Basic, обрабатывает многие детали работы с COM-объектами, такими как маршаллинг взаимодействия, процесс упаковки параметров и возврат значений в эквивалентные типы данных при переходе к объектам COM и из них. Ссылка в приложении Visual Basic указывает на сборку взаимодействия, а не фактический COM-объект.
Использование COM-объекта с Visual Basic 2005 и более поздними версиями
Откройте новый проект приложения Windows на Visual Basic.
В меню Проект выберите пункт Добавить ссылку.
Появится диалоговое окно Добавление ссылки.
На вкладке COM дважды щелкните
ComObject1
список "Имя компонента" и нажмите кнопку "ОК".В меню Проект выберите Добавить новый элемент.
Откроется диалоговое окно Добавление нового элемента .
В области "Шаблоны" нажмите кнопку "Класс".
Имя
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
вызов вызывает метод, который расширяет класс. Свойство в базовом классе задано, и отображается значение.
Next Steps
Возможно, вы заметили, что перегруженная функция, как представляется, имеет тот же тип данных, что и метод, унаследованный AddNumbers
от базового класса объекта COM. Это связано с тем, что аргументы и параметры метода базового класса определяются как 16-разрядные целые числа в Visual Basic 6.0, но они предоставляются в виде 16-разрядных целых чисел типа Short
в более поздних версиях Visual Basic. Новая функция принимает 32-разрядные целые числа и перегружает функцию базового класса.
При работе с COM-объектами убедитесь, что вы проверяете размер и типы данных параметров. Например, при использовании COM-объекта, который принимает объект коллекции Visual Basic 6.0 в качестве аргумента, нельзя предоставить коллекцию из более поздней версии Visual Basic.
Свойства и методы, унаследованные от классов COM, можно переопределить, то есть можно объявить локальное свойство или метод, заменяющий свойство или метод, унаследованный от базового КЛАССА COM. Правила переопределения унаследованных свойств COM аналогичны правилам переопределения других свойств и методов со следующими исключениями:
При переопределении любого свойства или метода, унаследованного от класса COM, необходимо переопределить все остальные унаследованные свойства и методы.
Свойства, использующие
ByRef
параметры, нельзя переопределить.