Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Especifica que uno o varios elementos de programación declarados están asociados a una clase o estructura en gran tamaño y no con una instancia específica de la clase o estructura.
Cuándo usar compartido
Compartir un miembro de una clase o estructura hace que esté disponible para cada instancia, en lugar de no compartida, donde cada instancia mantiene su propia copia. El uso compartido es útil, por ejemplo, si el valor de una variable se aplica a toda la aplicación. Si declara esa variable como Shared, todas las instancias acceden a la misma ubicación de almacenamiento y, si una instancia cambia el valor de la variable, todas las instancias tienen acceso al valor actualizado.
El uso compartido no modifica el nivel de acceso de un miembro. Por ejemplo, un miembro de clase puede compartirse y ser privado (accesible solo desde dentro de la clase) o no compartido y público. Para obtener más información, vea Niveles de acceso en Visual Basic.
Reglas
Contexto de declaración. Solo puede usar
Shareden el nivel de módulo. Esto significa que el contexto de declaración de unSharedelemento debe ser una clase o estructura y no puede ser un archivo de origen, un espacio de nombres o un procedimiento.Modificadores combinados. No se puede especificar
Sharedjunto con Overrides, Overridable, NotOverridable, MustOverride o Static en la misma declaración.Acceso. Para acceder a un elemento compartido, puede calificarlo con su nombre de clase o estructura, no con el nombre de variable de una instancia específica de su clase o estructura. Ni siquiera tiene que crear una instancia de una clase o estructura para acceder a sus miembros compartidos.
En el ejemplo siguiente se llama al procedimiento IsNaN compartido expuesto por la Double estructura .
If Double.IsNaN(result) Then Console.WriteLine("Result is mathematically undefined.")Uso compartido implícito. No se puede usar el
Sharedmodificador en una instrucción Const, pero las constantes se comparten implícitamente. Del mismo modo, no puede declarar un miembro de un módulo o una interfaz para que seaShared, pero se comparten implícitamente.
Comportamiento
Almacenamiento. Una variable o evento compartido se almacena en memoria solo una vez, independientemente de cuántas o pocas instancias cree de su clase o estructura. Del mismo modo, un procedimiento compartido o una propiedad contiene solo un conjunto de variables locales.
Acceso a través de una variable de instancia. Para acceder a un elemento compartido, es posible calificarlo con el nombre de una variable que contiene una instancia específica de su clase o estructura. Aunque esto suele funcionar según lo previsto, el compilador genera un mensaje de advertencia y realiza el acceso a través de la clase o el nombre de la estructura en lugar de la variable.
Acceso a través de una expresión de instancia. Si tiene acceso a un elemento compartido a través de una expresión que devuelve una instancia de su clase o estructura, el compilador realiza el acceso a través de la clase o el nombre de la estructura en lugar de evaluar la expresión. Este acceso produce resultados inesperados si se pretende que la expresión realice otras acciones, así como devolver la instancia. En el ejemplo siguiente se muestra esta situación.
Sub Main() ' The following line is the preferred way to access Total. ShareTotal.Total = 10 ' The following line generates a compiler warning message and ' accesses total through class ShareTotal instead of through ' the variable instanceVar. This works as expected and adds ' 100 to Total. Dim instanceVar As New ShareTotal instanceVar.Total += 100 ' The following line generates a compiler warning message and ' accesses total through class ShareTotal instead of calling ' ReturnClass(). This adds 1000 to total but does not work as ' expected, because the WriteLine in ReturnClass() does not run. Console.WriteLine("Value of total is " & CStr(ShareTotal.Total)) ReturnClass().Total += 1000 End Sub Public Function ReturnClass() As ShareTotal Console.WriteLine("Function ReturnClass() called") Return New ShareTotal End Function Public Class ShareTotal Public Shared Property Total As Integer End ClassEn el ejemplo anterior, el compilador genera un mensaje de advertencia ambas veces que el código accede a la propiedad
Totalcompartida a través de una instancia. En cada caso, realiza el acceso directamente a través de la claseShareTotaly no hace uso de ninguna instancia. En el caso de la llamada prevista al procedimientoReturnClass, esto significa que ni siquiera genera una llamada aReturnClass, por lo que no se realiza la acción adicional de mostrar "Function ReturnClass() llamada".
El Shared modificador se puede usar en estos contextos:
- Instrucción Dim
- Declaración de Evento
- Instrucción Function
- Declaración del Operador
- Declaración de Propiedad
- Instrucción Sub