property (Extensiones de componentes de C++)
Declara una propiedad, que es una función miembro que se comporta y se tiene acceso como un miembro de datos o un elemento de matriz.
Todos los runtimes
Puede declarar uno de los siguientes tipos de propiedades.
propiedad simple
De forma predeterminada, crea un descriptor de acceso set que asigna el valor de propiedad, un descriptor de acceso get que recupera el valor de propiedad y un miembro de datos privado generado por el compilador que contiene el valor de propiedad.bloque de propiedad
Use esto para crear descriptores de acceso get y/o set definidos por el usuario. La propiedad es de lectura y escritura si se definen los descriptores de acceso get y set, de solo lectura si solo se define el descriptor de acceso get y de solo escritura si solo se define el descriptor de acceso set.Debe declarar explícitamente un miembro de datos que contiene el valor de propiedad.
propiedades indizadas
Un bloque de propiedad que puede utilizar para obtener y establecer el valor de propiedad que es especificado por uno o más índices.Puede crear una propiedad indizada que tenga un nombre de propiedad definido por el usuario o un nombre de propiedad predeterminado . El nombre de una propiedad index predeterminada es el nombre de la clase en la que se define la propiedad. Para declarar una propiedad predeterminada, especifique la palabra clave default en lugar de un nombre de propiedad.
Debe declarar explícitamente un miembro de datos que contiene el valor de propiedad. Para una propiedad indizada, el miembro de datos es normalmente una matriz o una colección.
Sintaxis
property type property_name;
property type property_name {
access-modifier type get() inheritance-modifier {property_body};
access-modifier void set(type value) inheritance-modifier {property_body};
}
property type property_name[index_list] {
access-modifier type get(index_list) inheritance-modifier {property_body};
access-modifier void set(index_list, value) inheritance-modifier {property_body};
}
property type default[index_list] {
access-modifier type get(index_list) inheritance-modifier {property_body};
access-modifier void set(index_list, value) inheritance-modifier {property_body};
}
Parámetros
type
El tipo de datos del valor de propiedad y, por tanto, la propiedad.property_name
Nombre de la propiedad.access-modifier
Un calificador de acceso. Los calificadores válidos son static y virtual.Los descriptores de acceso get o set no tienen por qué concordar con el calificador virtual, pero deben concordar con el calificador static.
inheritance-modifier
Un calificador de herencia. Los calificadores válidos son abstract y sealed.index_list
Una lista delimitada por comas de uno o más índices. Cada índice consta de un tipo de índice y un identificador opcional que se pueden utilizar en el cuerpo del método de propiedad.value
Valor que se asigna a la propiedad en una operación Set o que se recupera en una operación Get.property_body
El cuerpo del método de propiedad del descriptor de acceso get o set. property_body puede usar index_list para tener acceso al miembro de datos subyacente de la propiedad o como parámetros en el procesamiento definido por el usuario.
Windows en tiempo de ejecución
Para obtener más información, vea Propiedades (C++/CX).
Requisitos
Opción del compilador: /ZW
Common Language Runtime
Sintaxis
modifier property type property_name;
modifier property type property_name {
modifier void set(type);
modifier type get();
}
modifier property type property_name[index-list, value] {
modifier void set(index-list, value);
modifier type get(index-list);
modifier property type default[index];
}
Parámetros
modifier
Un modificador que se puede utilizar en una declaración de propiedad o un método de descriptor de acceso get/set. Los valores posibles son static y virtual.type
Tipo del valor que está representado por la propiedad.property_name
El parámetro o parámetros para el método raise; debe coincidir con la signatura del delegado.index_list
Una lista delimitada por comas de uno o más índices, especificada entre corchetes (operador de subíndice, ([])). Para cada índice, especifique un tipo y opcionalmente un identificador que se pueden utilizar en el cuerpo del método de la propiedad.
Comentarios
En el primer ejemplo de sintaxis se muestra una propiedad simple que declara implícitamente un método set y get. El compilador crea automáticamente un campo privado para almacenar el valor de la propiedad.
En el segundo ejemplo de sintaxis se muestra un bloque de propiedad, que declara de forma explícita los métodos set y get.
El tercer ejemplo de sintaxis muestra una propiedad de índice definida por el cliente. Una propiedad index acepta parámetros además del valor que se debe establecer o recuperar. Debe especificar un nombre para la propiedad. A diferencia de una propiedad simple, los métodos set y/o get de una propiedad de índice deben definirse explícitamente y debe especificarse un nombre para la propiedad.
El cuarto ejemplo de sintaxis muestra una propiedad predeterminada que proporciona acceso similar al de una matriz a una instancia del tipo. La palabra clave, default, solo sirve para especificar una propiedad predeterminada. El nombre de la propiedad predeterminada es el nombre del tipo en el que se define la propiedad.
La palabra clave property puede aparecer en una clase, interfaz o tipo de valor. Una propiedad puede tener una función get (solo lectura), una función set (solo escritura) o ambas (lectura y escritura).
Un nombre de propiedad no puede coincidir con el nombre de la clase administrada que lo contiene. El tipo de valor devuelto de la función captadora debe coincidir con el tipo del último parámetro de una función establecedora correspondiente.
Para el código de cliente, una propiedad tiene el aspecto de un miembro de datos normal y se puede escribir o leer en ella usando la misma sintaxis que un miembro de datos.
Los métodos get y set no tienen por qué coincidir en el modificador virtual .
La accesibilidad del método get y set pueden diferir.
La definición de un método de propiedad puede aparecer fuera del cuerpo de la clase, como un método normal.
El método get y set para una propiedad concordarán con el modificador static .
Una propiedad es escalar si sus métodos get y set caben en la descripción siguiente:
El método get no tiene parámetros y tiene el tipo de valor devuelto T.
El método set tiene un parámetro de tipo T y el tipo de valor devuelto void.
Habrá solo una propiedad escalar declarada en un ámbito con el mismo identificador. Las propiedades escalares no pueden sobrecargarse.
Cuando se declara un miembro de datos de propiedad, el compilador inserta en la clase un miembro de datos, conocido a veces como “memoria auxiliar”. Sin embargo, el nombre del miembro de datos es de una forma tal que no se puede hacer referencia al miembro en el origen como si fuera un miembro de datos real de la clase contenedora. Use ildasm.exe para ver los metadatos del tipo y el nombre generado por el compilador para la memoria auxiliar de la propiedad.
Se permiten distintos tipos de accesibilidad para los métodos de descriptor de acceso en un bloque de propiedad. Es decir, el método set puede ser public y el método get puede ser private. Sin embargo, es un error para un método de descriptor de acceso tener una accesibilidad menos restrictiva que la que hay en la declaración de la propiedad en sí.
property es una palabra clave contextual. Para obtener más información, vea Palabras clave contextuales (Extensiones de componentes de C++).
Para obtener más información acerca de las propiedades, vea
Requisitos
Opción del compilador: /clr
Ejemplos
En el ejemplo siguiente se muestra la declaración y el uso de un miembro de datos de propiedad y un bloque de propiedad. También se muestra que un descriptor de acceso de propiedad se puede definir fuera de clase.
// mcppv2_property.cpp
// compile with: /clr
using namespace System;
public ref class C {
int MyInt;
public:
// property data member
property String ^ Simple_Property;
// property block
property int Property_Block {
int get();
void set(int value) {
MyInt = value;
}
}
};
int C::Property_Block::get() {
return MyInt;
}
int main() {
C ^ MyC = gcnew C();
MyC->Simple_Property = "test";
Console::WriteLine(MyC->Simple_Property);
MyC->Property_Block = 21;
Console::WriteLine(MyC->Property_Block);
}
Resultados
Vea también
Conceptos
Extensiones de componentes para plataformas de tiempo de ejecución