Tutorial: Implementar la herencia mediante objetos COM (Visual Basic)

Puede derivar clases Visual Basic de clases en objetos COM, incluso las creadas Public en versiones anteriores de Visual Basic. Las propiedades y los métodos de las clases heredadas de objetos COM se pueden invalidar o sobrecargar igual que las propiedades y los métodos de cualquier otra clase base se pueden invalidar o sobrecargar. La herencia de objetos COM es útil cuando tiene una biblioteca de clases existente que no desea volver a compilar.

El siguiente procedimiento muestra cómo usar Visual Basic 6.0 para crear un objeto COM que contiene una clase y, a continuación, usarlo como una clase base.

Nota

Es posible que el equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que se tenga y la configuración que se utilice determinan estos elementos. Para obtener más información, vea Personalizar el IDE.

Para compilar el objeto COM que se usa en este tutorial

  1. En Visual Basic 6.0, abra un nuevo proyecto ActiveX DLL. Se crea un proyecto Project1 denominado . Tiene una clase denominada Class1 .

  2. En el Explorador Project , haga clic con el botón derecho en Proyecto1 y, a continuación, haga clic en Propiedades de Project1. Se muestra Project cuadro de diálogo Propiedades de la aplicación.

  3. En la pestaña General del cuadro de diálogo Project propiedades, escriba el nombre del proyecto en el ComObject1 Project nombre.

  4. En el Explorador Project , haga clic con el botón derecho en Class1 y, a continuación, haga clic en Propiedades. Se muestra la ventana Propiedades de la clase .

  5. Cambie la propiedad Name a MathFunctions.

  6. En el Explorador Project , haga clic con el botón derecho en MathFunctions y, a continuación, haga clic en Ver código. Se muestra el Editor de código.

  7. Agregue una variable local para contener el valor de propiedad:

    ' Local variable to hold property value
    Private mvarProp1 As Integer
    
  8. Agregar Let procedimientos de propiedad Get y propiedad:

    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
    
  9. Agregue una función:

    Function AddNumbers(
       ByVal SomeNumber As Integer,
       ByVal AnotherNumber As Integer) As Integer
    
       AddNumbers = SomeNumber + AnotherNumber
    End Function
    
  10. Para crear y registrar el objeto COM, haga clic en ComObject1.dll en el menú Archivo.

    Nota

    Aunque también puede exponer una clase creada con Visual Basic como un objeto COM, no es un objeto COM verdadero y no se puede usar en este tutorial. Para obtener más información, vea Interoperabilidad COM en .NET Framework aplicaciones.

Ensamblados de interoperabilidad

En el procedimiento siguiente, creará un ensamblado de interoperabilidad, que actúa como un puente entre el código no administrado (por ejemplo, un objeto COM) y el código administrado Visual Studio utiliza. El ensamblado de interoperabilidad que Visual Basic controla muchos de los detalles de trabajar con objetos COM, como la serialización de interoperabilidad , el proceso de empaquetar parámetros y devolver valores en tipos de datos equivalentes a medida que se mueven hacia y desde objetos COM. La referencia de la Visual Basic aplicación apunta al ensamblado de interoperabilidad, no al objeto COM real.

Para usar un objeto COM con Visual Basic 2005 y versiones posteriores

  1. Abra un proyecto Aplicación Windows de Visual Basic nuevo.

  2. En el menú Proyecto, haga clic en Agregar referencia.

    Aparecerá el cuadro de diálogo Agregar referencia.

  3. En la pestaña COM, haga doble clic en ComObject1 la lista Nombre del componente y haga clic en Aceptar.

  4. En el menú Proyecto , haga clic en Agregar nuevo elemento.

    Se abrirá el cuadro de diálogo Agregar nuevo elemento.

  5. En el panel Plantillas, haga clic en Clase.

    El nombre de archivo predeterminado, Class1.vb , aparece en el campo Nombre. Cambie este campo a MathClass.vb y haga clic en Agregar. Esto crea una clase denominada MathClass y muestra su código.

  6. Agregue el código siguiente al principio de MathClass para heredar de la clase 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
    
  7. Sobrecargue el método público de la clase base agregando el código siguiente a 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
    
  8. Extienda la clase heredada agregando el código siguiente a 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
    

La nueva clase hereda las propiedades de la clase base en el objeto COM, sobrecarga un método y define un nuevo método para extender la clase.

Para probar la clase heredada

  1. Agregue un botón al formulario de inicio y, a continuación, haga doble clic en él para ver su código.

  2. En el procedimiento del controlador de eventos del botón, agregue el código siguiente para crear una instancia de Click y llamar a los MathClass métodos sobrecargados:

    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)
    
  3. Ejecute el proyecto presionando F5.

Al hacer clic en el botón del formulario, primero se llama al método con números de tipo de datos y Visual Basic elige el método adecuado AddNumbers Short de la clase base. La segunda llamada a AddNumbers se dirige al método de sobrecarga desde MathClass . La tercera llamada llama al SubtractNumbers método , que extiende la clase . Se establece la propiedad de la clase base y se muestra el valor .

Pasos siguientes

Es posible que haya observado que la función sobrecargada parece tener el mismo tipo de datos que el método heredado de la AddNumbers clase base del objeto COM. Esto se debe a que los argumentos y parámetros del método de clase base se definen como enteros de 16 bits en Visual Basic 6.0, pero se exponen como enteros de 16 bits de tipo en versiones posteriores Short de Visual Basic. La nueva función acepta enteros de 32 bits y sobrecarga la función de clase base.

Al trabajar con objetos COM, asegúrese de comprobar el tamaño y los tipos de datos de los parámetros. Por ejemplo, cuando se usa un objeto COM que acepta un objeto de colección Visual Basic 6.0 como argumento, no se puede proporcionar una colección de una versión posterior de Visual Basic.

Las propiedades y los métodos heredados de las clases COM se pueden invalidar, lo que significa que puede declarar una propiedad o método local que reemplace una propiedad o método heredado de una clase COM base. Las reglas para invalidar las propiedades COM heredadas son similares a las reglas para reemplazar otras propiedades y métodos con las siguientes excepciones:

  • Si invalida cualquier propiedad o método heredado de una clase COM, debe invalidar todas las demás propiedades y métodos heredados.

  • Las propiedades que ByRef usan parámetros no se pueden invalidar.

Consulta también