Información general sobre propiedades

Un componente debe definir propiedades en lugar de campos públicos porque los diseñadores visuales, como Visual Studio, muestran propiedades y no campos en el explorador de propiedades. (Al final del tema encontrará otros motivos para definir propiedades).

Las propiedades son como campos inteligentes. Normalmente, una propiedad tiene un miembro de datos privado acompañado por funciones de descriptor de acceso, y se tiene acceso a ella mediante sintaxis como el campo de una clase. Aunque las propiedades pueden tener diferentes niveles de acceso, esta explicación se centra en el caso más habitual de acceso público. Debido a que las propiedades han estado disponibles en varias ediciones de Visual Basic, es posible que los programadores de Visual Basic deseen omitir este tema.

Normalmente, la definición de una propiedad consta de las dos siguientes partes:

  • Definición de un miembro de datos privado.

    private int number = 0;
    
    Private number As Integer = 0
    
  • Definición de una propiedad pública utilizando la sintaxis de declaración de la propiedad. En esta sintaxis se asocia el miembro de datos privado con una propiedad pública mediante las funciones de descriptor de acceso get y set.

    public int MyNumber 
    {
    // Retrieves the number data member.
    get 
       { 
          return number; 
       }
    // Assigns to the number data member.
    set 
       { 
          number = value;
       }
    }
    
    Public Property MyNumber As Integer
       ' Retrieves number.
       Get 
          Return number
       End Get
       ' Assigns to number.
       Set 
          number = value
       End Set
    End Property
    

El término value es una palabra clave en la sintaxis de la definición de la propiedad. La variable value se asigna a la propiedad en el código de llamada. El tipo de value debe ser el mismo que el tipo declarado de la propiedad a la que se va a asignar.

Aunque una definición de propiedad normalmente incluye un miembro de datos privado, no es necesario. El descriptor de acceso get podría devolver un valor sin tener acceso a un miembro de datos privado. Un ejemplo es una propiedad cuyo método get devuelve la hora del sistema. Las propiedades permiten ocultar datos y los métodos de los descriptores de acceso ocultan la implementación de la propiedad.

Existen algunas diferencias en la sintaxis de las propiedades en los diferentes lenguajes de programación. Por ejemplo, el término propiedad no es una palabra clave en C#, pero sí en Visual Basic. Para obtener información más específica consulte la documentación del lenguaje.

En el siguiente ejemplo se define una propiedad denominada MyNumber en la clase SimpleProperty y se obtiene acceso a MyNumber de la clase UsesSimpleProperty.

public class SimpleProperty 
{
   private int number = 0;
   public int MyNumber 
   {
   // Retrieves the data member number.
   get 
      { 
         return number; 
      }
   // Assigns to the data member number.
   set 
      { 
         number = value;
      }
   } 
// Other members.
}
public class UsesSimpleProperty
{
   public static void Main()
   {
      SimpleProperty example = new SimpleProperty();
// Sets the property.
      example.MyNumber = 5;
// Gets the property.
      int anumber = example.MyNumber;
   }
}
Public Class SimpleProperty 
    Private number As Integer = 0

    Public Property MyNumber As Integer
        ' Retrieves number.
        Get 
            Return number
        End Get
        ' Assigns to number.
        Set 
            number = value
        End Set
    End Property    

' Other members...
End Class

Public Class UsesSimpleProperty
    Public Shared Sub Main()
        Dim example As New SimpleProperty()
        ' Sets the property.
        example.MyNumber = 5
        ' Gets the property.
        Dim anumber As Integer = example.MyNumber
    End Sub
End Class

Los métodos get y set no difieren de otros métodos. Pueden ejecutar la lógica de cualquier programa, producir excepciones, reemplazarse y declararse con cualquiera de los modificadores que permita el lenguaje de programación. No obstante, recuerde que las propiedades también pueden ser estáticas. Si una propiedad es estática, existen limitaciones en las operaciones que los métodos get y set pueden realizar. Para obtener más información, vea la documentación del lenguaje de programación.

El tipo de una propiedad puede ser un tipo primitivo, una colección de tipos primitivos, un tipo definido por el usuario o una colección de tipos definidos por el usuario. Para todos los tipos primitivos, .NET Framework dispone de convertidores de tipos que implementan conversiones de cadena a valor. Para obtener más información, vea Conversión generalizada de tipos. Cuando hay un convertidor de tipos disponible para una propiedad, se puede mostrar en el explorador de propiedades, en el diseñador. Si define propiedades personalizadas y desea que el explorador de propiedades las muestre, debe implementar convertidores de tipos personalizados.

Cuando el tipo de datos de una propiedad es una enumeración, un entorno de desarrollo como Microsoft Visual Studio mostrará la propiedad como una lista desplegable en la ventana Propiedades. Si el tipo de datos de una propiedad es una clase que tiene propiedades, éstas se denominan subpropiedades de la propiedad definidora. En la ventana Propiedades de Visual Studio, se puede expandir una propiedad para mostrar sus subpropiedades.

Es importante agregar atributos a las propiedades para que se muestren correctamente en el explorador de propiedades en tiempo de diseño. Para obtener más información, vea Atributos en tiempo de diseño para componentes.

Debe exponer las propiedades de los componentes en lugar de los campos públicos porque las propiedades admiten versiones, permiten ocultar datos y los métodos de descriptor de acceso pueden ejecutar una lógica adicional. Normalmente, debido a optimizaciones Just-In-Time, las propiedades no son más costosas que los campos.

Vea también

Conceptos

Atributos en tiempo de diseño para componentes