Descripción general de propiedades
Un componente debe definir propiedades en lugar de campos públicos porque los diseñadores visuales, como Visual Studio .NET, muestran propiedades y no campos en el examinador 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; [Visual Basic] 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; } } [Visual Basic] 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 .NET. 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;
}
}
[Visual Basic]
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, iniciar 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, consulte 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 conversores de tipos que implementan conversiones de cadena a valor. Para obtener más información, vea Conversión generalizada de tipos. Cuando hay un conversor de tipos disponible para una propiedad, se puede mostrar en el examinador de propiedades, en el diseñador. Si define propiedades personalizadas y desea que el examinador de propiedades las muestre, debe implementar conversores de tipos personalizados.
Cuando el tipo de datos de una propiedad es una enumeración, un entorno de desarrollo como Microsoft Visual Studio .NET, 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 .NET, se puede expandir una propiedad para mostrar sus subpropiedades.
Es importante agregar atributos a las propiedades para que se muestren correctamente en el examinador de propiedades en tiempo de diseño. Para obtener más información, vea Atributos de 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.