Atributos

De C# Online.NET (CSharp-Online.NET)—su enciclopedia libre de C# y .NET

Manejo de datos - básico
edit
Guía de estudio para el Examen 70-536

1. Tipos y colecciones

Conceptos clave
Temas relacionados

editar

Un atributo-un término muy sobreusado-en C# es un mecanismo que define palabras como declaraciones descriptivas, para anotar a elementos de un programa como lo son tipos, campos, métodos, y propiedades. Estos atributos son usados para extender la metadata de la entidad seleccionada. La información que los atributos contienen puede ser devuelta en tiempo de ejecución desde la metadata a través del mecanismo Reflexión. Puedes usar números atributos predefinidos que vienen con el FCL (Framework Class Library), o puedes definir tu propio atributo personalizado, luego se detalla más.

Tabla de contenidos

Uso y sintaxis

El uso convencional de agregar al final el sufijo "Attribute" a todos los nombres de atributos es adoptado para distinguirlos de otros miembros de la plataforma .NET. Sin embargo, no es necesario especificar el sufijo atributo cuando uses atributos. Por ejemplo, DllImport es el equivalente de DllImportAttribute, pero DllImportAttribute es el nombre actual del atributo en la plataforma .NET.

Los atributos pueden ser puestos en casi cualquier declaración (a pesar de que un atributo específico puede restringir los tipos de declaraciones en la que es válido). Sintácticamente, un atributo es especificado poniendo el nombre del atributo, entre paréntesis rectos, antes de la declaración de la entidad a la que se aplica. Por ejemplo, una clase con el atributo DllImport es declarada de este modo:

[DllImport] public class MiClaseDllImport { ... }

Parámetros

  • Posicional (sin nombre)
    Parámetros posicionales son especificados primero. Cualquier parámetro posicional debe se especificado en un orden dado y no puede ser omitido.
  • Parámetros nombrados
    Parámetros nombrados son opcionales y no tienen orden alguno.

Por ejemplo, estos tres atributos son equivalentes:

[DllImport("super.dll", SetLastError=false, ExactSpelling=false)]
[DllImport("super.dll", ExactSpelling=false, SetLastError=false)]
[DllImport("super.dll")]

El primer parámetro, el nombre de la DLL, es posicional y siempre va primero. Los otros son nombrados. La posición de los parámetros nombrados no es importante (mientras que le sigan a los posicionales).

Más de un atributo puede ser puesto en una declaración, ambos dentro o fuera de los mismos corchetes:

bool Metodo([In][Out]ref double x);
bool Metodo([Out][In]ref double x);
bool Metodo([In,Out]ref double x);

Algunos atributos pueden ser especificados más de una vez para una entidad dada. Un ejemplo de aquellos atributos multiusos es Conditional:

[Conditional("DEBUG"), Conditional("TEST1")] void MetodoTrace() {...}

Destino del atributo

En situaciones específicas, el destino de un atributo (que es la entidad la cual el atributo es aplicado) parece ser ambigua. Por ejemplo, en la siguiente declaración de método, el atributo SomeAttr podría aplicarse al método o al valor de retorno del método:

[Atr] int Metodo( string s )

Este orden de la situación se plantea frequentemente. Para resolver esta ambigüedad, C# tiene un set de destinos predeterminados para cada tipo de declaración, que puede ser sobreescrita excplícitamente especificando el destino del atributo.

[method: Atr] int Metodo( string s ) // se aplica a un método
[return: Atr] int Metodo( string s ) // se aplica a un valor de retorno
[Atr] int Metodo( string s ) // por defecto: se aplica a un método

La independencia de los destinos en que Atr es definido de se válido (véase AtributeUsage); esos es, aunque si Atr fue definido para aplicar valores de retorno, el retorno de destino sigue siendo especificado. En otras palabras, el compilador no usará la información AtributeUsage para resolver destinos de atributos ambiguos.

La sintaxis del destino del atributo como el siguiente:

[destino : lista de atributos]

donde detino es uno de los siguientes:

  • assembly
  • field
  • event
  • method
  • module
  • param
  • property
  • return
  • type

Atributos predefinidos o reservados

La plataforma .NET viene con casi 200 atributos predefinidos, usados para propósitos como depurar, para tiempo de diseño, compilador/comportamiento del control del runtime, y mucho más. Como los sioguientes 3 ejemplos:

  • AttributeUsage: Describe como una clase de atributo personalizado puede ser usado.
  • Conditional: Marca un método condicional, un método que su ejecución depende en un preproceso identificador específico.
  • Obsolete: Marca una entidad del programa que debería no ser usada. Esto es usado por el compilador de C#.

Atributos personalizados

Por definición, un atributo es extendido de System.Attribute. System.Attribute es una clase abstracta definiendo los servicios itrínsecos de un atributo.







Herramientas personales
páginas hermanas