BC42025: acesso de membro compartilhado, membro constante, membro enumerado ou tipo aninhado por meio de uma instância; A expressão de qualificação não será avaliada

Uma variável de instância de uma classe ou estrutura é usada para acessar uma Shared variável, propriedade, procedimento ou evento definido nessa classe ou estrutura. Esse aviso também pode ocorrer se uma variável de instância for usada para acessar um membro implicitamente compartilhado de uma classe ou estrutura, como uma constante ou enumeração, ou uma classe ou estrutura aninhada.

A finalidade de compartilhar um membro é criar apenas uma única cópia desse membro e disponibilizar essa única cópia para cada instância da classe ou estrutura na qual ele é declarado. É consistente com essa finalidade acessar um Shared membro por meio do nome de sua classe ou estrutura, em vez de por meio de uma variável que contém uma instância individual dessa classe ou estrutura.

Acessar um Shared membro por meio de uma variável de instância pode tornar seu código mais difícil de entender ocultando o fato de que o membro é Shared. Além disso, se esse acesso fizer parte de uma expressão que executa outras ações, como um Function procedimento que retorna uma instância do membro compartilhado, o Visual Basic ignora a expressão e quaisquer outras ações que ele executaria de outra forma.

Para obter mais informações e um exemplo, consulte Shared.

Por padrão, essa mensagem é um aviso. Para obter mais informações sobre como ocultar avisos ou tratar avisos como erros, consulte Configurando avisos no Visual Basic.

ID do erro: BC42025

Exemplo

O exemplo a seguir gera 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 esse aviso

Use o nome da classe ou estrutura que define o Shared membro para acessá-lo, conforme mostrado no exemplo a seguir:

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

Observação

Fique atento aos efeitos do escopo quando dois elementos de programação tiverem o mesmo nome. No exemplo anterior, se você declarar uma instância usando Dim testClass As TestClass = Nothing, o compilador tratará uma chamada testClass.SayHello() como um acesso do método por meio do nome da classe e nenhum aviso ocorrerá.

Consulte também