Cómo utilizar las propiedades personalizadas de C#
Utilice atributos para agregar descripciones a clases, propiedades y métodos en tiempo de diseño, y luego inspecciónelos en tiempo de ejecución a través de información de reflexión. Este artículo nos presenta cómo utilizar las propiedades personalizadas de C# al desarrollar aplicaciones. Este artículo se puede descargar del artículo técnico, que contiene un proyecto de ejemplo de Visual Studio que utiliza propiedades personalizadas. Las clases de propiedad son clases especiales que se pueden aplicar a clases, propiedades y métodos en tiempo de diseño. Las clases de atributos proporcionan una manera de describir ciertos aspectos de un elemento o determinar el comportamiento de otras clases adjuntas al elemento, lo que permite acceder y examinar estas descripciones y comportamientos en tiempo de ejecución. Puede pensar en las clases de propiedad como una forma de agregar modificadores especiales a los miembros de la clase. Por ejemplo, si alguna vez ha escrito un servicio web, sabrá que para hacer público un método en todo el servicio, debe utilizar el atributo WebMethod. Este es un buen ejemplo del uso de propiedades, ya que estamos ampliando el modelo de programación con propiedades WebMethod. No existe una forma integrada en C# para especificar que un método es visible a través de un servicio web (porque hay una forma integrada para indicar que un método es privado), por lo que es necesario agregar el atributo WebMethod para satisfacer esta necesidad. . Diseño de atributos personalizados El proceso de diseño de atributos personalizados es muy simple. Sólo necesita considerar los siguientes aspectos antes de diseñar atributos: ¿Cuál es el propósito de usar atributos que se pueden usar de muchas maneras? Debe definir qué se supone que deben lograr exactamente las propiedades y asegurarse de que estas funciones específicas no estén integradas en .NET Framework. Es mejor utilizar modificadores .NET que propiedades porque simplificará el proceso de integración con otros ensamblados. ¿Qué información debe almacenarse en el atributo? ¿Los atributos pretenden ser indicadores simples que indican alguna funcionalidad? ¿O el atributo necesita almacenar información? Una propiedad puede tener un conjunto de información asignada en tiempo de diseño y visualizada en tiempo de ejecución. Por ejemplo, observe la propiedad Alias en la aplicación de muestra. ¿En qué ensamblaje debería residir el atributo? En la mayoría de los casos, puede incluir una propiedad en un ensamblaje que la utilice. Sin embargo, también hay casos en los que sería mejor que los atributos residieran en ensamblajes corporativos, de peso pluma y de uso general. Este tipo de configuración permite a los clientes utilizar atributos sin hacer referencia a ensamblajes innecesarios. ¿Qué asambleas reconocerán el atributo? Si ningún módulo lee la propiedad, no tendrá valor. Lo más probable es que coloques la clase que lee la propiedad en el mismo ensamblado donde reside la propiedad. Sin embargo, como se mencionó anteriormente, hay casos en los que desea colocar el método de lectura de una propiedad en un ensamblado diferente al de la propiedad misma. public string SSN{get { return _ssn }set { _ssn = value }} Como ejemplo más complejo, digamos que tendremos una propiedad llamada "Alias". La tarea de esta propiedad es comprobar que una propiedad pueda tener alias. Esto permitirá asignar un valor de propiedad a otra propiedad incluso si los nombres de las propiedades no coinciden. Esta propiedad acepta una secuencia de valores de cadena como nombre del mapa. (Lista B) Lista B[Alias ("FirstName", "First")]cadena pública FName{get { return _fName }set { _fName = value }} En este ejemplo, la propiedad "FName" está asignada a; "FirstName" y "First", consulte la aplicación de muestra para comprenderla con más detalle. public Alias(params string[] nombres){this.Names = nombres;}public string[] Nombres{get { return _names }set { _names = value }}} Como puede ver, esta es una Clase normal, con la única excepción son aquellos que heredan de la clase System.Attribute. No necesitamos hacer nada especial para que sea una clase. Simplemente definimos un constructor para usar y crear una propiedad y un miembro privado para almacenar datos. El Listado D es un atributo más simple: el atributo "Ocultar".
Esta propiedad no requiere un constructor (utiliza el constructor predeterminado) y no almacena datos. Porque este atributo es solo un atributo de tipo bandera simple. ListDClass Ocultar: System.Attribute{//Este es un atributo simple, que solo requiere // el constructor predeterminado.} Leer atributos del código Leer atributos e inspeccionar los datos que contienen es significativamente más complejo que usar atributos o crear atributos. La lectura de propiedades requiere que los desarrolladores tengan un conocimiento básico de cómo utilizar la información reflejada de un objeto. Si no está familiarizado con el mecanismo de reflexión, puede leer la serie de artículos "Aplicación de la reflexión". Supongamos que estamos mirando una clase y queremos saber qué propiedades de la clase usan propiedades de Alias y qué alias tienen. El Listado E implementa esta funcionalidad. Lista EPDiccionario privado
Como dije antes, leer las propiedades es la parte más difícil. Sin embargo, una vez que hayamos escrito el código para leer las propiedades, será bastante fácil de recordar e implementar en el futuro. Ejemplo de aplicación Le recomiendo encarecidamente que descargue el ejemplo de aplicación incluido en este artículo. Este ejemplo de aplicación implementa las siguientes propiedades en una aplicación simple de Windows y demuestra cómo leerlas y usarlas. Alias: es lo mismo que la propiedad Alias mencionada anteriormente. Debe utilizar esta propiedad cuando necesite traducir un tipo de objeto a otro tipo. Por ejemplo, si tiene un objeto Cliente y un objeto Dirección, es posible que desee traducirlos a un objeto Persona fusionado que contenga el nombre y la dirección de la persona. Esta propiedad se puede utilizar cuando no se puede utilizar una asignación directa. DisplayName: el código de muestra incluye código que examina una instancia de clase e imprime su nombre de propiedad y valor en la pantalla. Esta propiedad se puede utilizar para anular el nombre de propiedad enviado a la pantalla. Por ejemplo, una propiedad denominada "FName" puede usar la propiedad DisplayName para que aparezca como "Nombre". Examinar: esta propiedad lleva el método PrintObject de la aplicación de ejemplo un paso más allá y genera el valor de la propiedad mediante la propiedad Examinar. Por ejemplo, el objeto Cliente en la aplicación de ejemplo aplica la propiedad Examinar a la propiedad Dirección. Esto le indicará al método PrintObject que genere toda la información en la propiedad de dirección. Ocultar: este atributo indica al método PrintObject() que no muestre la propiedad actual en la pantalla. Esta propiedad se utiliza en la propiedad SSN del objeto Cliente. La aplicación de muestra contiene comentarios para cada paso de implementación y lectura de propiedades. Eche un vistazo más de cerca y estoy seguro de que encontrará algunas características que podrá aprovechar en sus propias aplicaciones.