Miembros compartidos en Visual Basic

Actualización: noviembre 2007

Los miembros compartidos son propiedades, procedimientos y campos que comparten todas las instancias de una clase o estructura. En algunos lenguajes de programación estos elementos se denominan miembros estáticos.

Campos y propiedades compartidos

Los campos y propiedades compartidos son útiles cuando se tiene información que forma parte de una clase, pero que no es específica de ninguna instancia de una clase. Cuando se cambia el valor de un campo y propiedad compartido, se cambia el valor asociado a la clase y todas las instancias de la clase.

Por otro lado, al cambiar el valor de un campo o propiedad no compartidos asociados a una instancia, el valor de dicho campo o propiedad no se ve afectado en otras instancias de la clase. Los campos y propiedades no compartidos existen de forma independiente en cada instancia de una clase.

De esta forma, los campos y propiedades compartidos se comportan como variables globales a las que sólo se puede tener acceso desde instancias de una clase, o con cualificación del nombre de clase. Sin campos ni propiedades compartidos, sería necesario utilizar variables en el nivel de módulo para conseguir el mismo efecto. No obstante, las variables módulo pueden dificultar la comprensión y el mantenimiento de las clases. Además, el uso de variables en el ámbito de módulo de esta forma infringe el concepto de encapsulación que las clases representan.

Procedimientos compartidos

Los procedimientos compartidos son métodos de clase que no están asociados con una instancia específica de una clase. Por ejemplo, el método Cos definido dentro de la clase Math es un método compartido. Se puede llamar a un procedimiento compartido como un método de un objeto o directamente desde la clase.

Los procedimientos y las propiedades compartidos no tienen acceso a las instancias de la clase. Por este motivo, en los métodos compartidos, sólo se permiten referencias calificadas a miembros de datos no compartidos.

Nota:

No conviene escribir código desde el que se pueda tener acceso a un miembro compartido a través de una instancia de la clase. Esto se debe a que el compilador no tiene en cuenta la calificación del miembro compartido y lo trata como si se obtuviera acceso a él directamente a través de la clase. En algunas situaciones, quizás desee que el objeto de cualificación ejecute cierto código y, por tanto, el compilador de Visual Basic genere una advertencia de acceso a un miembro compartido a través de una instancia de una clase. IntelliSense no muestra los miembros compartidos de una instancia de la clase.

Ejemplo de miembros compartidos

En el ejemplo siguiente se crea un campo compartido, dos campos de instancias y un método compartido para demostrar cómo funcionan los miembros compartidos en el código:

Public Class Item
    Public Shared Count As Integer = 1
    Public Shared Sub ShareMethod()
        MsgBox("Current value of Count: " & Count)
    End Sub

    Public Sub New(ByVal Name As String)
        ' Use Count to initialize SerialNumber.
        Me.SerialNumber = Count
        Me.Name = Name
        ' Increment the shared variable
        Count += 1
    End Sub
    Public SerialNumber As Integer
    Public Name As String
    Public Sub InstanceMethod()
        MsgBox("Information in the first object: " & _
            Me.SerialNumber & vbTab & Me.Name)
    End Sub
End Class

Sub TestShared()
    ' Create two instances of the class.
    Dim part1 As New Item("keyboard")
    Dim part2 As New Item("monitor")

    part1.InstanceMethod()
    part2.InstanceMethod()
    Item.ShareMethod()
End Sub

Cuando ejecuta el procedimiento TestShared, se crean dos instancias de la clase. El constructor utiliza el campo compartido Count para inicializar el campo de instancia SerialNumber y, a continuación, incrementa Count. Esta técnica proporciona automáticamente a cada instancia un número de serie diferente.

Después de crear las dos instancias, el método de instancia InstanceMethod se llama en ambos objetos, y también se llama al método compartido ShareMethod. El resultado es:

Information in the first object: 1 keyboard

Information in the second object: 2 monitor

Current value of the shared Count field: 3

Vea también

Conceptos

Estructuras y clases

Referencia

Instrucción Dim (Visual Basic)

Cos

Otros recursos

Propiedades, campos y métodos de clases

Estructuras: tipos de datos propios