Solucionar problemas de variables en Visual Basic
Esta página muestra algunos problemas comunes que pueden aparecer al trabajar con variables en Visual Basic.
No se puede obtener acceso a los miembros de un objeto
Si el código intenta tener acceso a una propiedad o un método en un objeto, hay dos posibles resultados de error:
El compilador puede generar un mensaje de error si declara la variable de objeto con un tipo específico y, a continuación, hace referencia a un miembro no definido por dicho tipo.
Se produce una excepción MemberAccessException en tiempo de ejecución cuando el objeto asignado a una variable de objeto no expone el miembro al que el código intenta obtener acceso.En el caso de una variable de Object (Tipo de datos), también puede obtener esta excepción si el miembro no es de tipo Public.Esto se debe a que el enlace en tiempo de ejecución sólo permite el acceso a miembros de tipo Public.
Si Option Strict (Instrucción) establece la comprobación de tipos como On, una variable de objeto sólo puede tener acceso a los métodos y propiedades de la clase con la que se ha declarado.Esto se ilustra en el siguiente ejemplo:
Dim p As Object = New System.Windows.Forms.Label
Dim q As System.Windows.Forms.Label = New System.Windows.Forms.Label
Dim j, k As Integer
' The following statement generates a compiler error.
j = p.Left
' The following statement retrieves the left edge of the label
' in pixels.
k = q.Left
En este ejemplo, p puede utilizar sólo los miembros de la propia clase Object, que no incluyen la propiedad Left.Por otro lado, q se ha declarado con el tipo Label, así que puede utilizar todos los métodos y propiedades de la clase Label en el espacio de nombres System.Windows.Forms.
Enfoque correcto
Para obtener acceso a todos los miembros de un objeto de una clase determinada, declare la variable de objeto con el tipo de dicha clase siempre que sea posible.Si no puede realizarlo de esta manera, por ejemplo si no conoce el tipo del objeto en tiempo de compilación, debe establecer Option Strict como Off y declarar la variable como Object (Tipo de datos).Esto permite que se asignen a la variable los objetos de cualquier tipo; debe llevar a cabo los pasos necesarios para asegurarse de que el objeto asignado es de un tipo válido.Para esto, puede utilizar TypeOf (Operador, Visual Basic).
Otros componentes no pueden tener acceso a la variable
En los nombres de Visual Basic no se distingue entre mayúsculas y minúsculas.Si dos nombres sólo se distinguen por el uso de mayúsculas y minúsculas, el compilador los interpreta como el mismo nombre.Por ejemplo, ABC y abc hacen referencia al mismo elemento declarado.
No obstante, Common Language Runtime (CLR) utiliza enlaces que sí distinguen entre mayúsculas y minúsculas.Por lo tanto, cuando genere un ensamblado o una DLL que pueda estar disponible para otros ensamblados, sus nombres sí se distinguirán por sus mayúsculas o minúsculas.Por ejemplo, si define una clase que tiene un elemento denominado ABC, y otros ensamblados utilizan la clase por medio de Common Language Runtime, deberán hacer referencia al elemento como ABC.Si, posteriormente, vuelve a compilar la clase y cambia el nombre del elemento a abc, los otros ensamblados que utilicen la clase ya no tendrán acceso a este elemento.Por lo tanto, cuando se lance una versión actualizada de un ensamblado, no se deben cambiar las mayúsculas o minúsculas de los elementos públicos.
Para obtener más información, vea Common Language Runtime (CLR).
Enfoque correcto
Para permitir a otros componentes tener acceso a las variables, trate sus nombres como si distinguieran entre mayúsculas y minúsculas.Cuando pruebe la clase o el módulo, asegúrese de que los demás ensamblados se enlazan con las variables esperadas.Después de publicar un componente, no realice ninguna modificación en los nombres de variable existentes, incluido el cambio entre mayúsculas y minúsculas.
Uso de la variable equivocada
Cuando tiene más de una variable con el mismo nombre, el compilador de Visual Basic intenta resolver cada referencia como dicho nombre.Si las variables tienen ámbito diferente, el compilador resuelve una referencia como la declaración con el ámbito más limitado.Si tienen el mismo ámbito, se produce un error en la resolución y el compilador señala un error.Para obtener más información, vea Referencias a elementos declarados (Visual Basic).
Enfoque correcto
Evite utilizar variables con el mismo nombre pero ámbito diferente.Si utiliza otros ensamblados o proyectos, evite en la medida de lo posible utilizar nombres definidos en dichos componentes externos.Si tiene más de una variable con el mismo nombre, asegúrese de calificar todas las referencias a ella.Para obtener más información, vea Referencias a elementos declarados (Visual Basic).
Vea también
Tareas
Cómo: Obtener acceso a los miembros de un objeto (Visual Basic)
Cómo: Determinar el tipo al que hace referencia una variable de objeto (Visual Basic)
Conceptos
Declaración de variable en Visual Basic
Variables de objeto en Visual Basic
Declaración de variables de objeto (Visual Basic)
Valores de las variables de objeto (Visual Basic)