InicioArticulos y noticiasBases de datosProgramaciónForosInternetServiciosContratacionEmail
Tutorial C#
Introduccion a C#
Programacion con C#
Fundamentos de C#
Operadores
Instrucciones
Estrcuturas de control.
Definición de clases
Creación de objetos
Herencia y métodos virtuales
Polimorfismo
Ocultación de miembros
Miembros de tipo
Encapsulación
Espacios de nombres
Importación de espacios de nombres
Espacio de nombres distribuidos
Variables y tipos de datos
Tablas unidimensionales
Tablas multidimensionales
La clase System.Array
Cadenas de texto
Constantes
Orden de inicialización de variables
Métodos
Métodos externos
Constructores
Destructores
Propiedades
Indizadores
Redefinición de operadores
Delegados y eventos
La clase MulticastDelegate
Llamadas asíncronas
Implementación interna de los delegados
Eventos
Estructuras
Boxing y unboxing
Constructores de estructuras
Enumeraciones
Interfaces
Excepciones
Otras instrucciones
Atributos
Definición de nuevos atributos
Lectura de atributos en tiempo de ejecución
Atributos de compilación
Pseudoatributos
Código inseguro
Definición de punteros
Manipulación de punteros
Operadores relacionados con código inseguro
Fijación de variables apuntadas
Novedades de C# 2.0
Genéricos
Tipos parciales
Iteradores
Mejoras en la manipulación de delegados
Tipos anulables
Modificadores de visibilidad de bloques get y set
Clases estáticas
Referencias a espacios de nombres
Supresión temporal de avisos
Atributos condicionales
Incrustación de tablas en estructuras
Modificaciones en el compilador
También puedes ver ...
Serialización: XmlSerializer y BinaryFormater
Handler para manipular imagenes
Conversiones de tipos personalizadas (VB y C#)
Compresión por gzip y deflate
La página Web que está abriendo contiene tanto elementos seguros como no seguros.
Cómo insertar un fichero .xml en un campo de tipo XML de SQL server 2005 o 2008
Comparativa de sentencias VB.Net vs C#
Aprende Ajax desde cero
Creando cadenas de conexión ConnectionStrings en .net 3.5 o visual Studio 2008 usando SqlConnectionStringBuilder
Migración de WSE a WCF (Web Services de 2005 a 2008)

Afiliados
La Web del programador
MundoProgramacion


Definición de nuevos atributos

Especificación del nombre del atributo

    Se considera que un atributo es toda aquella clase que derive de System.Attribute. Por tanto, para definir un nuevo tipo de atributo hay que crear una clase que derive de ella. Por convenio, a este tipo de clases suele dárseles nombres acabados en Attribute, aunque a la hora de usarlas desde C# es posible obviar dicho sufijo. Un ejemplo de cómo definir un atributo llamado Ayuda es:


using System;
class AyudaAttribute:Attribute
{}

    Y ejemplos de cómo usarlo prefijando la definición de clases son:


[Ayuda]
class A
{}
[AyudaAttribute] 
class B
{}

    Puede darse la circunstancia de que se haya definido un atributo con un cierto nombre sin sufijo Attribute y otro que si lo tenga. Como es lógico, en ese caso cuando se use el atributo sin especificar el sufijo se hará referencia a la versión sin sufijo y cuando se use con sufijo se hará referencia a la versión con sufijo.

Especificación del uso de un atributo

    Por defecto cualquier atributo que se defina puede preceder la  definición de cualquier elemento del lenguaje. Si se desea limitar a qué definiciones puede preceder es necesario prefijar la clase que lo define con un atributo especial llamado System.AttributeUsage. Este atributo consta de los siguientes parámetros con nombre:

  • AllowMultiple: Por defecto cada atributo sólo puede aparecer una vez prefijando a cada elemento. Dándole el valor true a este parámetro se considerará que puede aparecer múltiples veces.

  • Inherited: Por defecto los atributos aplicados a una clase no son heredados en sus clases hijas. Dándole el valor true a este parámetro se consigue que sí lo sean.

    Aparte de estos dos parámetros, AttributeUsage también puede contar con un parámetro opcional sin nombre que indique a qué tipos de definiciones puede preceder. Por defecto se considera que un atributo puede preceder a cualquier elemento, lo que es equivalente a darle el valor AttributeTargets.All a este parámetro. Sin embrago es posible especificar otras posibilidades dándole valores de la enumeración  System.AttributeTargets, que son los que se recogen en la Tabla 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F00520065006600340038003600360038003300310034003700000000 :

Valor de AttributeTargets

Significa que el atributo puede preceder a...

All

Cualquier definición

Assembly

 Definiciones de espacio de nombres, considerándose que el atributo se refiere al ensamblado en general.

Module

 Definiciones de espacio de nombres, considerándose que el atributo se refiere al módulo en su conjunto.

Class

 Definiciones de clases

Delegate

 Definiciones de delegados

Interface

 Definiciones de interfaces

Struct

 Definiciones de estructuras

Enum

 Definiciones de enumeraciones

Field

 Definiciones de campos

Method

 Definiciones de métodos

Constructor

 Definiciones de constructores

Property

 Definiciones de propiedades o indizadores

Event

 Definiciones de eventos

Parameter

 Definiciones de parámetros de métodos

ReturnValue

 Definiciones de valores de retorno de métodos

Tabla 9: Valores de AttributeTargets

    Es posible combinar varios de estos valores mediante operaciones lógicas "or" (carácter | ) Por ejemplo, si queremos definir el atributo Ayuda anterior de modo que sólo pueda ser usado para prefijar definiciones de enumeraciones o de clases se haría:


[AttributeUsage(AttributeTargets.Class |  AttributeTargetes.Enum)]
class Ayuda:Attribute
{}
       
    Es importante resaltar que AttributeUsage sólo puede incluirse precediendo definiciones de otros atributos (o sea, de clases derivadas de System.Attribute)

Especificación de parámetros válidos

    Se considera que los parámetros sin nombre que puede tomar un atributo son aquellos que se especifiquen como parámetros en el constructor del tipo que lo define, y que sus parámetros con nombre serán las propiedades y campos públicos, no estáticos y de lectura/escritura definidos en dicho tipo.

    Un ejemplo de cómo definir el atributo Ayuda anterior de modo que tome un parámetro sin nombre con la URL que indique dónde encontrar la ayuda sobre el miembro o clase al que precede y un parámetro con nombre llamado Autor que indique quién es el autor de esa documentación es:


[AttributeUsage(AttributeTargets.Class |  AttributeTargets.Enum)]
class Ayuda:Attribute
{
 private string autor;
 private string url;
 
 public Ayuda(string URL)
 { url=URL; }
 
 public string Autor
 {
  set {autor = value;}
  get {return autor;}
 }          
}

    Ejemplos de usos válidos de este atributo son:


[Ayuda("http://www.josan.com/Clases/A.html")]
class A {}

[Ayuda("http://www.josan.com/Clases/B.html", Autor="José Antonio")]
class B {}

    Los tipos válidos de parámetros, tanto con nombre como sin él, que puede tomar un atributo son: cualquier tipo básico excepto decimal y los tipos enteros sin signo, cualquier enumeración pública, System.Type o tablas unidimensionales de elementos de cualquiera de los anteriores tipos válidos.


Inicio | Tutorial C# AtributosTutorial C#Lectura de atributos en tiempo de ejecución Versión para imprimir Foros de consulta

 
QUE ES ATRIBUTO... por Anónimo
Respuesta recibida el [01/04/2008 04:13:22]
QUE ES ATRIBUTO

 
muy bueno por yuli
Respuesta recibida el [15/04/2008 01:26:20]
hola . pues me parecio muy interesante, ya tengo mas informacion sobre c#. gracias.

 
que es atributo? por yuli
Respuesta recibida el [15/04/2008 01:28:45]
hola quisiera igual q me dijeran en general lo q es un atributo. gracias... visten mi metro, www.metroflog.com/yuli_89. jaja se los agradeceria.

 
Cojonuda la información. Junto... por Lite
Respuesta recibida el [09/02/2009 06:01:19]
Cojonuda la información. Junto con reflection, me va a ir de perlas para un sistema de plugins que tengo que montar. 


Añadir comentario ... Para preguntar utiliza los foros
Autor:

Título:


Para preguntar utiliza los foros.



Inicio | Tutorial C# AtributosTutorial C#Lectura de atributos en tiempo de ejecución Versión para imprimir

Definición de nuevos atributos
Autor: José Antonio González Seco
Visitas: 8241 Fecha de publicación: 28/11/2006
José Antonio es experto en tecnologias Microsoft. Imparte cursos y conferencias en congresos sobre C# y .NET en Universidades de toda España (Sevilla, Barcelona, San Sebastián, Valencia, Oviedo, etc.) en representación de grandes empresas como Microsoft.




Visitas: 201 | Comentarios: 0 | Archivo: Articulos
Categorias: C#
Visitas: 315 | Comentarios: 1 | Archivo: Articulos
Visitas: 390 | Comentarios: 1 | Archivo: Articulos
Categorias: Humor
Visitas: 615 | Comentarios: 3 | Archivo: Articulos
Categorias: C#|ASP.NET
Visitas: 1177 | Comentarios: 4 | Archivo: Articulos
Visitas: 697 | Comentarios: 1 | Archivo: Articulos
Categorias: ASP.NET|ASP|Windows XP|Windows 2003
Visitas: 828 | Comentarios: 2 | Archivo: Articulos
Categorias: Java|Solaris
Visitas: 584 | Comentarios: 0 | Archivo: Articulos
Visitas: 1484 | Comentarios: 1 | Archivo: Articulos
Categorias: ADO.NET
Visitas: 1533 | Comentarios: 3 | Archivo: Articulos
Categorias: ASP.NET

Útimos temas recibidos en los foros ...
Manual Visual Studio.NET por Shiko ... [Visual Basic .NET] 34 26/10/2006
llamar procedimientos de pl/sql en java por jhon ... [ORACLE] 0 03/07/2009
consulta multitablas por anga ... [mySQL] 0 03/07/2009
objetos helper php bajo oracle por objetos_helper_oracle ... [ISAPI] 0 02/07/2009
ranuras isa o pci por sara ... [Access] 5 30/03/2006
descargar tutorial C# por afmp ... [C#] 54 14/10/2008
Tutorial TOAD para Oracle en Español por ijpj ... [ORACLE] 19 14/03/2009
quiero mi numero de mi autogenerado por pablo ... [Visual Basic .NET] 1 15/06/2009
Ayuda con cargar fotografias de otra pc por Alex ... [ASP.NET] 0 01/07/2009
splash screen por zelca ... [Visual Basic .NET] 0 01/07/2009
Error de inicio de aplicación por Danrre ... [C#] 0 30/06/2009
sumar los precios de la columna "precio" del grig por jardinderosas ... [C#] 7 01/11/2007

Access CGI JSP ORACLE UNIX
Actualidad HTML/DHTML/XHTML LINUX PHP Visual Basic .NET
ASP ISAPI MS DOS Power Builder Visual Basic 6.0
ASP.NET Java mySQL SQL WIN 98/NT/2000/XP
C# JavaScript Opinion SQL Server

devjoker  Te recomendamos además ...
03/10/2006 Herencia y métodos virtuales    forma parte de...Tutorial C#
22/10/2005 Insertar datos. INSERT    forma parte de...Tutorial SQL
21/07/2006 Funciones integradas de PL/SQL    forma parte de...Tutorial PL/SQL
14/01/2008 Novedades Visual Studio 2008 DataSet en 3 capas o MVC
12/06/2007 Estructuras de control en Transact SQL    forma parte de...Tutorial de Transact SQL
01/06/2006 Cursores de actualización en PL/SQL    forma parte de...Tutorial PL/SQL
01/01/2006 Borrado de datos. DELETE    forma parte de...Tutorial SQL
13/04/2008 Métodos Extensores: INNER JOIN    forma parte de...Linq y Métodos extensores
28/06/2006 Excepciones en PL/SQL    forma parte de...Tutorial PL/SQL
14/07/2007 Como encriptar texto y variables usando algoritmos estandard como DES o TRIPLEDES

 

Encuesta
¿A que perfil te adaptas mejor?
[Ver] [Votar]