Compartir a través de


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

Una variable de instancia de una clase o estructura se usa para tener acceso a una Shared variable, propiedad, procedimiento o evento definido en esa clase o estructura. Esta advertencia también puede producirse si se usa una variable de instancia para tener acceso a un miembro compartido implícitamente 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 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 tener acceso a un Shared miembro a través del nombre de su clase o estructura, en lugar de a través de una variable que contiene una instancia individual de esa clase o estructura.

El acceso a un Shared miembro 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 Function procedimiento que devuelve una instancia del miembro compartido, Visual Basic omite la expresión y cualquier otra acción que realizaría de otro modo.

Para obtener más información y un ejemplo, vea Compartido.

De forma predeterminada, este mensaje es una advertencia. Para obtener más información sobre cómo ocultar advertencias o tratar advertencias como errores, vea Configurar advertencias en Visual Basic.

Identificador de error: BC42025

Ejemplo

En el ejemplo siguiente se genera 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 solucionar esta advertencia

Use el nombre de la clase o estructura que define el Shared miembro para acceder a él, 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 tengan 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