Property Statement

Declara el nombre de una propiedad y los procedimientos de propiedad utilizados para almacenar y recuperar el valor de la propiedad.

Sintaxis

[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ] [ Iterator ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]
    [ <attributelist> ] [ accessmodifier ] Get
        [ statements ]
    End Get
    [ <attributelist> ] [ accessmodifier ] Set ( ByVal value As returntype [, parameterlist ] )
        [ statements ]
    End Set
End Property
- or -
[ <attributelist> ] [ Default ] [ accessmodifier ]
[ propertymodifiers ] [ Shared ] [ Shadows ] [ ReadOnly | WriteOnly ]
Property name ( [ parameterlist ] ) [ As returntype ] [ Implements implementslist ]

Partes

  • attributelist

    Opcional. Lista de atributos correspondientes a esta propiedad o a los procedimientos Get o Set. Vea Lista de atributos.

  • Default

    Opcional. Especifica que esta propiedad es la propiedad predeterminada de la clase o la estructura donde se define. Las propiedades predeterminadas deben aceptar parámetros y se pueden establecer y recuperar sin especificar el nombre de la propiedad. Si la propiedad se declara como Default, Private no puede usarse en la propiedad ni en ninguno de sus procedimientos de propiedad.

  • accessmodifier

    Opcional en la instrucción Property y al menos en una de las instrucciones Get y Set. Puede ser uno de los siguientes:

    Vea Access levels in Visual Basic.

  • propertymodifiers

    Opcional. Puede ser uno de los siguientes:

  • Shared

    Opcional. Vea Shared.

  • Shadows

    Opcional. Consulte Shadows.

  • ReadOnly

    Opcional. Vea ReadOnly.

  • WriteOnly

    Opcional. Vea WriteOnly.

  • Iterator

    Opcional. Vea Iterator.

  • name

    Necesario. Nombre de la propiedad. Vea Declared Element Names.

  • parameterlist

    Opcional. Lista de nombres de variables locales que representan los parámetros de esta propiedad, y posibles parámetros adicionales del procedimiento Set. Vea Lista de parámetros.

  • returntype

    Necesario si Option Strict es On. Tipo de datos del valor devuelto por esta propiedad.

  • Implements

    Opcional. Indica que esta propiedad implementa una o varias propiedades, cada una definida en una interfaz implementada por la estructura o clase contenedora de esta propiedad. Vea Implements (Instrucción).

  • implementslist

    Es necesario si se proporciona Implements. Lista de propiedades que se implementan.

    implementedproperty [ , implementedproperty ... ]

    Cada implementedproperty tiene la sintaxis y las partes siguientes:

    interface.definedname

    Parte Descripción
    interface Necesario. Nombre de una interfaz implementada por la estructura o clase contenedora de esta propiedad.
    definedname Necesario. Nombre por el que se define la propiedad en interface.
  • Get

    Opcional. Necesario si la propiedad está marcada como ReadOnly. Inicia un procedimiento de propiedad Get que se usa para devolver el valor de la propiedad. La Get instrucción no se usa con propiedades implementadas automáticamente.

  • statements

    Opcional. Bloque de instrucciones que se ejecutarán en los procedimientos Get o Set.

  • End Get

    Finaliza el procedimiento de propiedad Get.

  • Set

    Opcional. Necesario si la propiedad está marcada como WriteOnly. Inicia un procedimiento de propiedad Set que se usa para almacenar el valor de la propiedad. La Set instrucción no se usa con propiedades implementadas automáticamente.

  • End Set

    Finaliza el procedimiento de propiedad Set.

  • End Property

    Finaliza la definición de esta propiedad.

Comentarios

La instrucción Property incluye la declaración de una propiedad. Una propiedad puede tener un procedimiento Get (solo lectura), un procedimiento Set (solo escritura) o ambos (lectura y escritura). Puede omitir el Get procedimiento y Set al usar una propiedad implementada automáticamente. Para obtener más información, consulte Propiedades implementadas automáticamente.

Property solo se puede usar en el nivel de clase. Esto significa que el contexto de la declaración de una propiedad debe ser una clase, una estructura, un módulo o una interfaz, y no puede ser un archivo de código fuente, un espacio de nombres, un procedimiento ni un bloque. Para obtener más información, vea Declaration Contexts and Default Access Levels (Contextos de declaración y niveles de acceso predeterminados).

Las propiedades usan el acceso público de forma predeterminada. El nivel de acceso de una propiedad se puede ajustar con un modificador de acceso en la instrucción Property y, opcionalmente, uno de sus procedimientos de propiedad se puede ajustar a un nivel de acceso más restrictivo.

Visual Basic pasa un parámetro al procedimiento Set durante las asignaciones de propiedades. Si no se proporciona un parámetro para Set, el entorno de desarrollo integrado (IDE) usa un parámetro implícito denominado value. Este parámetro contiene el valor que se va a asignar a la propiedad. Este valor suele almacenarse en una variable local privada, y se devuelve cada vez que se llama al procedimiento Get.

Reglas

  • Niveles de acceso mixtos. Si va a definir una propiedad de lectura y escritura, puede especificar opcionalmente un nivel de acceso diferente para el procedimiento Get o Set, pero no ambos. Si lo hace, el nivel de acceso del procedimiento debe ser más restrictivo que el de la propiedad. Por ejemplo, si la propiedad se declara como Friend, puede declarar el procedimiento Set como Private, pero no Public.

    Si se va a definir una propiedad ReadOnly o WriteOnly, el procedimiento de propiedad única (Get o Set, respectivamente) representa toda la propiedad. No se puede declarar un nivel de acceso diferente para este tipo de procedimiento, porque eso establecería dos niveles de acceso para la propiedad.

  • Tipo de valor devuelto. La instrucción Property puede declarar el tipo de datos del valor que devuelve. Se puede especificar cualquier tipo de datos o el nombre de una enumeración, una estructura, una clase o una interfaz.

    Si no se especifica returntype, la propiedad devuelve Object.

  • Implementación. Si la propiedad usa la palabra clave Implements, la estructura o la clase contenedora debe tener una instrucción Implements que vaya inmediatamente después de su instrucción Class o Structure. La instrucción Implements debe incluir cada interfaz especificada en implementslist. Sin embargo, el nombre por el que una interfaz define una Property (en definedname) no tiene que ser el mismo que el nombre de esta propiedad (en name).

Comportamiento

  • Devolución desde un procedimiento de propiedad. Cuando los procedimientos Get o Set vuelven al código de llamada, la ejecución continúa con la instrucción que sigue a la instrucción que realizó la llamada.

    Las instrucciones Exit Property y Return provocan una salida inmediata de un procedimiento de propiedad. Puede aparecer cualquier número de instrucciones Exit Property y Return en cualquier parte del procedimiento, y se pueden mezclar instrucciones Exit Property y Return.

  • Valor devuelto. Para devolver un valor a partir de un procedimiento Get, se puede asignar el valor al nombre de propiedad o incluirlo en una instrucción Return. En el siguiente ejemplo se asigna el valor devuelto al nombre de propiedad quoteForTheDay y, a continuación, se usa la instrucción Exit Property para volver.

    Private quoteValue As String = "No quote assigned yet."
    
    ReadOnly Property QuoteForTheDay() As String
        Get
            QuoteForTheDay = quoteValue
            Exit Property
        End Get
    End Property
    

    Si se usa Exit Property sin asignar un valor a name, el procedimiento Get devuelve el valor predeterminado del tipo de datos de la propiedad.

    De manera simultánea, la instrucción Return asigna el valor devuelto del procedimiento Get y sale del procedimiento. Esto se muestra en el ejemplo siguiente.

    Private quoteValue As String = "No quote assigned yet."
    
    ReadOnly Property QuoteForTheDay() As String
        Get
            Return quoteValue
        End Get
    End Property
    

Ejemplo

En el siguiente ejemplo se declara una propiedad en una clase.

Class Class1
    ' Define a local variable to store the property value.
    Private propertyValue As String
    ' Define the property.
    Public Property Prop1() As String
        Get
            ' The Get property procedure is called when the value
            ' of a property is retrieved.
            Return propertyValue
        End Get
        Set(ByVal value As String)
            ' The Set property procedure is called when the value
            ' of a property is modified.  The value to be assigned
            ' is passed in the argument to Set.
            propertyValue = value
        End Set
    End Property
End Class

Consulte también