Niveles de acceso en Visual Basic

El nivel de acceso de un elemento declarado es la extensión de la capacidad de acceder a él, es decir, qué código tiene permiso para leerlo o escribir en él. Esto viene determinado no solo por cómo declara el propio elemento, sino también por el nivel de acceso del contenedor del elemento. El código que no puede tener acceso a un elemento contenedor no puede tener acceso a ninguno de sus elementos contenidos, incluso aquellos declarados como Public. Por ejemplo, se puede tener acceso a una variable Public de una estructura Private desde dentro de la clase que contiene la estructura, pero no desde fuera de esa clase.

Público

La palabra clave Public de la instrucción de declaración especifica que se puede tener acceso al elemento desde el código en cualquier parte del mismo proyecto, desde otros proyectos que hacen referencia al proyecto y desde cualquier ensamblado compilado desde el proyecto. El código siguiente muestra un ejemplo de declaración Public:

Public Class ClassForEverybody

Puede usar Public solo en el nivel de módulo, interfaz o espacio de nombres. Esto significa que puede declarar un elemento público en el nivel de un archivo de origen o espacio de nombres, o dentro de una interfaz, un módulo, una clase o una estructura, pero no en un procedimiento.

Protegido

La palabra clave Protected de la instrucción de declaración especifica que solo se puede tener acceso al elemento desde dentro de la misma clase o desde una clase derivada de esta clase. El código siguiente muestra un ejemplo de declaración Protected:

Protected Class ClassForMyHeirs

Solo se puede usar Protected en el nivel de clase y solo cuando se declara un miembro de una clase. Esto significa que puede declarar un elemento protegido en una clase, pero no en el nivel de un archivo de origen o espacio de nombres, o dentro de una interfaz, módulo, estructura o procedimiento.

Friend

La palabra clave Friend de la instrucción de declaración especifica que se puede tener acceso al elemento desde dentro del mismo ensamblado, pero no desde fuera del ensamblado. El código siguiente muestra un ejemplo de declaración Friend:

Friend stringForThisProject As String

Puede usar Friend solo en el nivel de módulo, interfaz o espacio de nombres. Esto significa que puede declarar un elemento friend público en el nivel de un archivo de origen o espacio de nombres, o dentro de una interfaz, un módulo, una clase o una estructura, pero no en un procedimiento.

Protected Friend

La combinación de palabras clave Protected Friend de la instrucción de declaración especifica que se puede tener acceso al elemento desde clases derivadas o desde dentro del mismo ensamblado, o ambos. El código siguiente muestra un ejemplo de declaración Protected Friend:

Protected Friend stringForProjectAndHeirs As String

Solo se puede usar Protected Friend en el nivel de clase y solo cuando se declara un miembro de una clase. Esto significa que puede declarar un elemento friend protegido en una clase, pero no en el nivel de un archivo de origen o espacio de nombres, o dentro de una interfaz, módulo, estructura o procedimiento.

Privada

La palabra clave Private de la instrucción de declaración especifica que solo se puede tener acceso al elemento desde dentro del mismo módulo, clase o estructura. El código siguiente muestra un ejemplo de declaración Private:

Private _numberForMeOnly As Integer

Solo se puede usar Private en un nivel de módulo. Esto significa que puede declarar un elemento privado dentro de un módulo, clase o estructura, pero no en el nivel de un archivo de origen o espacio de nombres, dentro de una interfaz o en un procedimiento.

En el nivel de módulo, la instrucción Dim sin ninguna palabra clave de nivel de acceso equivale a una declaración Private. Sin embargo, es posible que quiera usar la palabra clave Private para facilitar la lectura e interpretación del código.

Private Protected

La combinación de palabras clave Private Protected de la instrucción de declaración especifica que solo se puede tener acceso al elemento desde dentro de la misma clase, así como desde las clases derivadas que se encuentran en el mismo ensamblado que la clase contenedora. El modificador de acceso Private Protected se admite a partir de Visual Basic 15.5.

En el siguiente ejemplo muestra una declaración Private Protected:

Private Protected internalValue As Integer

Puede declarar un elemento Private Protected solo dentro de una clase. No se puede declarar dentro de una interfaz o estructura, ni se puede declarar en el nivel de un archivo de origen o espacio de nombres, dentro de una interfaz o una estructura, o en un procedimiento.

Visual Basic 15.5 y versiones posteriores admiten el modificador de acceso Private Protected. Para utilizarlo, se debe agregar el siguiente elemento al archivo de proyecto de Visual Basic (*.vbproj). Siempre que Visual Basic 15.5 o posterior esté instalado en el sistema, le permite aprovechar todas las características de lenguaje compatibles con la versión más reciente del compilador de Visual Basic:

<PropertyGroup>
   <LangVersion>latest</LangVersion>
</PropertyGroup>

Para usar el modificador de acceso Private Protected se debe agregar el siguiente elemento al archivo de proyecto de Visual Basic (*.vbproj):

<PropertyGroup>
   <LangVersion>15.5</LangVersion>
</PropertyGroup>

Para obtener más información, consulta la configuración de la versión de lenguaje de Visual Basic.

Modificadores de acceso

Las palabras clave que especifican el nivel de acceso se denominan modificadores de acceso. En la tabla siguiente se comparan los modificador de acceso:

Modificador de acceso Nivel de acceso concedido Elementos que puede declarar con este nivel de acceso Contexto de declaración en el que puede usar este modificador
Public Sin restricción:

Cualquier código que pueda ver un elemento público puede acceder a él
Interfaces

Módulos

Clases

Estructuras

Miembros de estructura

Procedimientos

Propiedades

Variables de miembro

Constantes

Enumeraciones

Events

Declaraciones externas

Delegados
Archivo de origen

Espacio de nombres

Interfaz

Módulo

Clase

Estructura
Protected Derivada:

El código de la clase que declara un elemento protegido, o una clase derivada de ella, puede tener acceso al elemento
Interfaces

Clases

Estructuras

Procedimientos

Propiedades

Variables de miembro

Constantes

Enumeraciones

Events

Declaraciones externas

Delegados
Clase
Friend Ensamblado:

El código del ensamblado que declara un elemento friend puede tener acceso a él
Interfaces

Módulos

Clases

Estructuras

Miembros de estructura

Procedimientos

Propiedades

Variables de miembro

Constantes

Enumeraciones

Events

Declaraciones externas

Delegados
Archivo de origen

Espacio de nombres

Interfaz

Módulo

Clase

Estructura
Protected Friend Unión de Protected y Friend:

El código de la misma clase o el mismo ensamblado que un elemento friend protegido, o dentro de cualquier clase derivada de la clase del elemento, puede acceder a él
Interfaces

Clases

Estructuras

Procedimientos

Propiedades

Variables de miembro

Constantes

Enumeraciones

Events

Declaraciones externas

Delegados
Clase
Private Contexto de declaración:

El código del tipo que declara un elemento privado, incluido el código dentro de los tipos contenidos, puede tener acceso al elemento
Interfaces

Clases

Estructuras

Miembros de estructura

Procedimientos

Propiedades

Variables de miembro

Constantes

Enumeraciones

Events

Declaraciones externas

Delegados
Módulo

Clase

Estructura
Private Protected Código de la clase que declara un elemento protegido privado o código en una clase derivada que se encuentra en el mismo ensamblado que la clase bas. Interfaces

Clases

Estructuras

Procedimientos

Propiedades

Variables de miembro

Constantes

Enumeraciones

Events

Declaraciones externas

Delegados
Clase

Consulte también