Tipos de propiedades

En los siguientes ejemplos se muestra cómo definir las propiedades primitivas (incluidas las propiedades de enumeración) y las propiedades de clase.

Nota   En .NET Framework, los tipos de valor como Boolean, Byte, Char, Double, Enum, Intnn, etc. se asignan a los tipos primitivos en lenguajes orientados a Common Language Runtime. Para obtener más información, vea la documentación del lenguaje de programación.

Aunque String es un tipo de referencia, se incluye entre los tipos primitivos en esta descripción ya que la sintaxis para obtener acceso a las propiedades String en las páginas ASP.NET es idéntica a la de los tipos primitivos.

El tipo de una propiedad de clase es de referencia.

Propiedades primitivas

El fragmento de código siguiente define una propiedad primitiva denominada Number.

// The private data member for the Number property.
private int number = 0;
//The description attribute contains a brief description of
//the property that is displayed 
//below the property browser when the user clicks on a 
//property.
//
[Description("A nonnegative integer")]
//The Number property that maps to the field number.
//
public int Number{
//The accessor methods perform other program logic
//in addition to setting or returning the property.
//
   get {
      if (number < 0) return 0;
      return number;
      }
   set {
      if (value < 0) number = 0;
      else number = value;
      }
   }
[Visual Basic]
' The private data member for the Number property.
Private _number As Integer = 0
'The description attribute contains a brief description of
'the property that is displayed 
'below the property browser when the user clicks on a 
'property.
'
<Description("A nonnegative integer")> _
Public Property Number() As Integer
   'The Number property that maps to the field number.
   '
   'The accessor methods perform other program logic
   'in addition to setting or returning the property.
   '
   Get
      If _number < 0 Then
         Return 0
      End If
      Return _number
   End Get
   Set
      If value < 0 Then
         _number = 0
      Else
         _number = value
      End If
   End Set
End Property

En el siguiente ejemplo se muestra la sintaxis de ASP.NET para definir de forma declarativa una propiedad primitiva (que no sea de enumeración) y se define la propiedad Text en una instancia del control System.Web.UI.WebControls.Button.

<asp:Button Text = "MyButton" runat = server/>

El analizador de páginas ASP.NET convierte la cadena especificada en el tipo de la propiedad. En este ejemplo, no hace falta conversión alguna ya que la propiedad Text es de tipo String.

Propiedades de enumeración

Cuando la propiedad es de tipo enumeración, la sintaxis de definición es igual que la de otros tipos de propiedades primitivas; sin embargo, la sintaxis de página para establecer la propiedad es diferente. El fragmento de código siguiente define una enumeración denominada Position.

// The Position enumeration.
   public enum Position 
   {
      Forward = 0,
      Mid = 1,
      Defence = 2,
      Goalee = 3,
   }
[Visual Basic]
' The Position enumeration.
Public Enum Position
   Forward = 0
   Mid = 1
   Defence = 2
   Goalee = 3
End Enum

El fragmento de código siguiente muestra un control (SoccerPlayer) que expone una propiedad de tipo Position.

   public class SoccerPlayer : Control 
   {  
      private Position position;
      ...
       // PlayerPosition is an enumeration property whose
      // type is the Position enumeration.
      [Description("The position of the player on the field.")]
      public Position PlayerPosition
      {
         get 
         {
            return position;
         }
         set 
         {
            position = value;
         }
      }
    ...
   }
[Visual Basic]
Public Class SoccerPlayer
   Inherits Control
   Private _position As Position   
   ...
   ' PlayerPosition is an enumeration property whose
   ' type is the Position enumeration.
   <Description("The position of the player on the field.")> _
   Public Property PlayerPosition() As Position
      Get
         Return _position
      End Get
      Set
         _position = value
      End Set
   End Property
   ...
End Class

En el siguiente ejemplo se muestra la sintaxis de ASP.NET para definir de forma declarativa una propiedad de enumeración y se define la propiedad TextMode en una instancia del control System.Web.UI.WebControls.TextBox.

<asp:TextBox TextMode = "MultiLine" runat = server/>

El analizador de páginas ASP.NET convierte la cadena especificada en el valor de enumeración correspondiente, en este caso TextBoxMode.MultiLine.

Si la propiedad es de tipo enumeración, sus valores se muestran en una lista desplegable cuando el usuario hace clic en ella, en el examinador de propiedades de un diseñador visual como Visual Studio.NET.

Propiedades de clase

Si una clase A tiene una propiedad cuyo tipo es la clase B, las propiedades de B (si existen) serán las subpropiedades de A.

El fragmento de código siguiente define una clase denominada Address que expone cuatro propiedades, todas de tipo String.

// The Address class.
public class Address {
    private string street = null;
    private string city = null;
    private string state = null;
    private string zip = null;

    // The Street property.
    public string Street {get{...} set{...}} 

    // The City property.
    public string City {get{...} set{...}}
     
    // The State property.
    public string State {get{...} set{...}}

    // The Zip property.
    public string Zip {get{...} set{...}}
}
[Visual Basic]
' The Address class.
Public Class Address
   Private _street As String = Nothing
   Private _city As String = Nothing
   Private _state As String = Nothing
   Private _zip As String = Nothing
   
   ' The Street property.
   Public Property Street() As String
      Get
         Return ""
      End Get
      Set
         _street = value
      End Set 
   End Property

   ' The City property.
   Public Property City() As String
      Get
         Return ""
      End Get
      Set
         _city = value
      End Set 
   End Property

   ' The State property.
   Public Property State() As String
      Get
         Return ""
      End Get
      Set
         _state = value
      End Set 
   End Property

   ' The Zip property.
   Public Property Zip() As String
      Get
         Return ""
      End Get
      Set
         _zip = value
      End Set
   End Property 
End Class
   

El fragmento de código siguiente define un control denominado SoccerPlayer que expone una propiedad cuyo tipo es la clase Address.

public class SoccerPlayer : Control 
   {  
      private Address address = new Address();

      // PlayerAddress is complex property whose 
      // type is the class Address. Address has four
      // properties, Street, City, State, and Zip. These become
      // subproperties of SoccerPlayer.
      public Address PlayerAddress
      {
         get
         {
            return address;
         }
      // Note that the set accessor is not defined.
      // The get accessor provides a handle to a PlayerAddress
      // instance that can be used to set a subproperty such as
      // PlayerAddress.Street.
      }
   }     
[Visual Basic]
Public Class SoccerPlayer
   Inherits Control
   Private address As New Address()
   
   ' PlayerAddress is complex property whose 
   ' type is the class Address. Address has four
   ' properties, Street, City, State, and Zip. These become
   ' subproperties of SoccerPlayer.
   Public ReadOnly Property PlayerAddress() As Address
      Get
         Return address
      End Get
      ' Note that the set accessor is not defined.
      ' The get accessor provides a handle to a PlayerAddress
      ' instance that can be used to set a subproperty such as
      ' PlayerAddress.Street.      
   End Property 
End Class

ASP.NET tiene una sintaxis especial para establecer subpropiedades. En el siguiente ejemplo se definen de forma declarativa las subpropiedades Font.Color y Font.Size en el control System.Web.UI.WebControls.Button. El guión (-) denota una subpropiedad.

<asp:Button Font-Color="red" Font-Size="3" runat=server/>

En un diseñador como Visual Studio.NET, se puede expandir una propiedad de clase para mostrar sus subpropiedades.

ASP.NET también permite el uso de una sintaxis anidada para las propiedades, mediante la cual las propiedades se pueden declarar como elementos secundarios dentro de las etiquetas de un control. Para permitir esta sintaxis, se debe marcar un control como ParseChildrenAttribute(true). Para obtener más información, vea Utilizar ParseChildrenAttribute. System.Web.UI.WebControl se marca como ParseChildrenAttribute(true). Los controles derivados de WebControl heredan su lógica de análisis predeterminada.

Nota   Las propiedades definidas en estos ejemplos no se almacenan durante las acciones de ida y vuelta en el cliente. Para definir las propiedades que se almacenan, hay que utilizar la propiedad ViewState de un control, como se describe en Mantener el estado de un control.

Vea también

Ejemplo de propiedad personalizada