Leer en inglés

Compartir a través de


BC42025: Acceso de miembro compartido, miembro de constante, miembro de enumeración o tipo anidado a través de una instancia; la expresión de calificación no se evaluará

Se usa una variable de instancia de una clase o estructura para acceder a una variable Shared, propiedad, procedimiento o evento definido en esa clase o estructura. Esta advertencia también puede ocurrir si se usa una variable de instancia para acceder a un miembro compartido de manera implícita de una clase o estructura, como una constante o enumeración, o una clase o estructura anidada.

El propósito de compartir un miembro es crear solo una copia única de ese miembro y hacer que esa copia única esté disponible para cada instancia de la clase o estructura en la que se declara. Es coherente con este propósito acceder a un miembro Shared a través del nombre de su clase o estructura, en lugar de hacerlo a través de una variable que contiene una instancia individual de esa clase o estructura.

El acceso a un miembro Shared a través de una variable de instancia puede dificultar la comprensión del código ocultando el hecho de que el miembro es Shared. Además, si este acceso forma parte de una expresión que realiza otras acciones, como un procedimiento Function que devuelve una instancia del miembro compartido, Visual Basic omite la expresión y cualquier otra acción que podría realizar.

Para más información y un ejemplo, consulte Shared.

De forma predeterminada, este mensaje es una advertencia. Para más información sobre cómo ocultar las advertencias o cómo tratarlas como errores, vea Configuring Warnings in Visual Basic.

Identificador de error: BC42025

Ejemplo

En el ejemplo siguiente, se genera el error bc42025:

Public Class TestClass
    Public Shared Sub SayHello()
        Console.WriteLine("Hello")
    End Sub
End Class

Module Program
    Public Sub Main()
        Dim tc As New TestClass()
        tc.SayHello() ' BC42025.
    End Sub
End Module

Para resolver esta advertencia

Use el nombre de la clase o la estructura que define el miembro Shared para acceder a él, tal como se muestra en el ejemplo siguiente:

Public Class TestClass
    Public Shared Sub SayHello()
        Console.WriteLine("Hello")
    End Sub
End Class

Module Program
    Public Sub Main()
        TestClass.SayHello()
    End Sub
End Module

Nota

Tenga en cuenta los efectos del ámbito cuando dos elementos de programación tienen el mismo nombre. En el ejemplo anterior, si declara una instancia mediante Dim testClass As TestClass = Nothing, el compilador trata una llamada a testClass.SayHello() como acceso del método a través del nombre de clase y no se produce ninguna advertencia.

Consulte también