AYUDA .NET

Atributos en C# (Cómo funciona para desarrolladores)

Publicado en 18 de febrero, 2024
Compartir:

En el mundo de la programación en C#, los metadatos desempeñan un papel crucial a la hora de enriquecer la semántica y el comportamiento del código. Atributos C# surgen como potentes herramientas que permiten a los desarrolladores adjuntar metadatos a diversas entidades de su código, lo que determina la forma en que los compiladores, las herramientas y los entornos de ejecución interpretan esas entidades e interactúan con ellas.

En esta completa guía, echaremos un vistazo a los atributos de C#, explorando su sintaxis, aplicaciones y cómo sirven como mecanismo versátil para mejorar la expresividad y funcionalidad del código.

Comprender los atributos de C#: A Primer

Atributos, entre corchetes([])son etiquetas declarativas que se colocan sobre los elementos de código para proporcionar información adicional sobre ellos. Esta información adicional, también conocida como metadatos, no afecta a la funcionalidad básica del código, pero ofrece información valiosa a compiladores, entornos de ejecución y herramientas.

En C#, un atributo de objeto representa metadatos asociados a una entidad de programa, como una clase o un método. Las instancias de atributos, definidas mediante la sintaxis de atributos, mejoran la descripción de una entidad de programa, como por ejemplo utilizando Conditional("DEBUG") para incluir condicionalmente el código.

He aquí un ejemplo básico de utilización de un atributo en C#:

[Serializable]
public class Person
{
    // Class Implementation
}
[Serializable]
public class Person
{
    // Class Implementation
}
<Serializable>
Public Class Person
	' Class Implementation
End Class
VB   C#

En este ejemplo, el atributo Serializable indica que las instancias de la clase Persona pueden serializarse.

Tipos de atributos de C

Los atributos se aplican a varios elementos del código C#, entre ellos:

  1. Asamblea: Se aplica a toda la asamblea, influyendo en su comportamiento durante la compilación y ejecución.
    [assembly: AssemblyVersion("1.0.0.0")]
    [assembly: AssemblyVersion("1.0.0.0")]
<Assembly: AssemblyVersion("1.0.0.0")>
VB   C#
  1. Módulo: Se aplica a un módulo dentro de un conjunto y proporciona información sobre el propio módulo.
    [module: SomeCustomModuleAttribute]
    [module: SomeCustomModuleAttribute]
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. Tipo: Se aplica a los tipos, influyendo en su comportamiento o proporcionando información adicional.
    [Serializable]
        public class Person
        {
            // Class Implementation
        }
    [Serializable]
        public class Person
        {
            // Class Implementation
        }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. Método: Se aplica a los métodos, alterando su comportamiento o proporcionando información a las herramientas.
    [Obsolete("Use the newMethod instead.")]
        public void DeprecatedMethod()
        {
            // Method implementation
        }
    [Obsolete("Use the newMethod instead.")]
        public void DeprecatedMethod()
        {
            // Method implementation
        }
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#
  1. Propiedad, campo, evento, etc.: Se aplica a miembros específicos dentro de un tipo, ofreciendo metadatos relevantes para esos miembros.
    public class Example
        {
            [DefaultValue(42)]
            public int Answer { get; set; }
        }
    public class Example
        {
            [DefaultValue(42)]
            public int Answer { get; set; }
        }
Public Class Example
			<DefaultValue(42)>
			Public Property Answer() As Integer
End Class
VB   C#

Creación de atributos personalizados en C#

Aunque C# proporciona numerosos atributos incorporados, los desarrolladores pueden crear atributos personalizados para transmitir información específica sobre su código. Los atributos personalizados se definen creando una clase que herede de System.Attribute:

[AttributeUsage(AttributeTargets.Class 
 AttributeTargets.Method, AllowMultiple = true)]
public class CustomAttribute : Attribute
{
    // Attribute Implementation
}
[AttributeUsage(AttributeTargets.Class 
 AttributeTargets.Method, AllowMultiple = true)]
public class CustomAttribute : Attribute
{
    // Attribute Implementation
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
VB   C#

En este ejemplo, CustomAttribute puede aplicarse a clases y métodos, y la propiedad AllowMultiple especifica si se permiten múltiples instancias del atributo en un único objetivo. Al crear una clase de atributos personalizados, se añade un sufijo de atributo al nombre de la clase para diferenciarla de las clases normales. El constructor de atributos inicializa estas propiedades, y los parámetros posicionales desempeñan un papel a la hora de pasar valores a estos atributos, proporcionando información estructurada en el código.

Aplicaciones de los atributos de C

1. Documentación del código

Los atributos desempeñan un papel crucial a la hora de documentar el código y proporcionar información adicional a los desarrolladores o las herramientas. Por ejemplo, el [Obsoleto] indica que un elemento concreto ya no debe utilizarse y que los desarrolladores deben migrar a una alternativa.

[Obsolete("This method is obsolete. Use the newMethod instead.")]
public void DeprecatedMethod()
{
    // Method Implementation
}
[Obsolete("This method is obsolete. Use the newMethod instead.")]
public void DeprecatedMethod()
{
    // Method Implementation
}
<Obsolete("This method is obsolete. Use the newMethod instead.")>
Public Sub DeprecatedMethod()
	' Method Implementation
End Sub
VB   C#

2. Serialización y persistencia

Atributos como [Serializable] informan al entorno de ejecución de que las instancias de un tipo pueden serializarse. Esto es crucial cuando se trata de escenarios como la persistencia de datos.

[Serializable]
public class Person
{
    // Class implementation
}
[Serializable]
public class Person
{
    // Class implementation
}
<Serializable>
Public Class Person
	' Class implementation
End Class
VB   C#

3. Análisis de código e integración de herramientas

Los atributos contribuyen a las herramientas de análisis estático y generación de código. Por ejemplo, herramientas como los marcos de pruebas unitarias utilizan atributos como TestMethod para identificar los métodos de prueba.

[TestClass]
public class MyTestClass
{
    [TestMethod]
    public void TestMethod()
    {
        // Test method implementation
    }
}
[TestClass]
public class MyTestClass
{
    [TestMethod]
    public void TestMethod()
    {
        // Test method implementation
    }
}
<TestClass>
Public Class MyTestClass
	<TestMethod>
	Public Sub TestMethod()
		' Test method implementation
	End Sub
End Class
VB   C#

4. Enrutamiento ASP.NET MVC

En ASP.NET MVC, los atributos se utilizan ampliamente para el enrutamiento. El atributo Route permite a los desarrolladores especificar la plantilla de ruta para un método de acción.

[Route("api/[controller]")]
public class SampleController : Controller
{
    [HttpGet]
    [Route("GetSampleData")]
    public IActionResult GetSampleData()
    {
        // Action method implementation
    }
}
[Route("api/[controller]")]
public class SampleController : Controller
{
    [HttpGet]
    [Route("GetSampleData")]
    public IActionResult GetSampleData()
    {
        // Action method implementation
    }
}
<Route("api/[controller]")>
Public Class SampleController
	Inherits Controller

	<HttpGet>
	<Route("GetSampleData")>
	Public Function GetSampleData() As IActionResult
		' Action method implementation
	End Function
End Class
VB   C#

Presentación de IronPDF: Un breve resumen

*descripción general de IronPDF*** es una biblioteca versátil diseñada para desarrolladores de C# .NET Framework, que ofrece un amplio conjunto de herramientas para la generación y manipulación de PDF. Desde la creación de PDF a partir de HTML hasta la extracción de contenido de documentos existentes, IronPDF simplifica tareas complejas, lo que lo convierte en un valioso activo en el conjunto de herramientas del desarrollador.

Atributos C# (Cómo funciona para el desarrollador): Figura 1 - Página web de IronPDF

Instalación de IronPDF: Inicio rápido

Para empezar a aprovechar la biblioteca IronPDF en su proyecto C#, puede instalar fácilmente el paquete IronPDF NuGet. Utilice el siguiente comando en la consola del gestor de paquetes:

Install-Package IronPdf

También puede buscar "IronPDF" en el gestor de paquetes NuGet e instalarlo desde allí.

Atributos de C#: Una visión general rápida

Los atributos de C# son etiquetas declarativas que proporcionan información adicional sobre entidades de su código, como clases, métodos o propiedades. Permiten a los desarrolladores adjuntar metadatos o definir comportamientos sin alterar la funcionalidad central del código, como se ha mencionado anteriormente. A medida que avancemos en la exploración de la integración de atributos con IronPDF, descubriremos cómo pueden contribuir a un enfoque más matizado de la generación de PDF.

Mejora de la generación de PDF con atributos de C

1. Personalización de los metadatos de los documentos

Los atributos pueden emplearse para enriquecer los metadatos asociados al documento PDF. IronPDF permite a los desarrolladores personalizar elementos de metadatos como título, autor y asunto. Mediante el uso de atributos, puede inyectar dinámicamente esta información en el PDF generado. El siguiente ejemplo muestra cómo utilizar diferentes clases de atributos con IronPDF:

PdfGenerationWithAttributes obj = new PdfGenerationWithAttributes();
obj.GeneratePdf();
// Define the DocumentMetadataAttribute
public class DocumentMetadataAttribute : Attribute
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string Subject { get; set; }
}
[DocumentMetadata(Title = "Custom PDF Title", Author = "John Doe", Subject = "Document Subject")]
public class PdfGenerationWithAttributes
{
    public void GeneratePdf()
    {
        // Instantiate IronPDF PdfDocument
        var pdfDocument = new PdfDocument("StyledDocument.pdf");
        // Retrieve DocumentMetadataAttribute using reflection
        var documentMetadata = typeof(PdfGenerationWithAttributes)
            .GetCustomAttributes(typeof(DocumentMetadataAttribute), false)
            .FirstOrDefault() as DocumentMetadataAttribute;
        // Set metadata values
        pdfDocument.MetaData.Title = documentMetadata?.Title;
        pdfDocument.MetaData.Author = documentMetadata?.Author;
        pdfDocument.MetaData.Subject = documentMetadata?.Subject;
        // Perform document generation
        pdfDocument.SaveAs("CustomizedDocument.pdf");
    }
}
PdfGenerationWithAttributes obj = new PdfGenerationWithAttributes();
obj.GeneratePdf();
// Define the DocumentMetadataAttribute
public class DocumentMetadataAttribute : Attribute
{
    public string Title { get; set; }
    public string Author { get; set; }
    public string Subject { get; set; }
}
[DocumentMetadata(Title = "Custom PDF Title", Author = "John Doe", Subject = "Document Subject")]
public class PdfGenerationWithAttributes
{
    public void GeneratePdf()
    {
        // Instantiate IronPDF PdfDocument
        var pdfDocument = new PdfDocument("StyledDocument.pdf");
        // Retrieve DocumentMetadataAttribute using reflection
        var documentMetadata = typeof(PdfGenerationWithAttributes)
            .GetCustomAttributes(typeof(DocumentMetadataAttribute), false)
            .FirstOrDefault() as DocumentMetadataAttribute;
        // Set metadata values
        pdfDocument.MetaData.Title = documentMetadata?.Title;
        pdfDocument.MetaData.Author = documentMetadata?.Author;
        pdfDocument.MetaData.Subject = documentMetadata?.Subject;
        // Perform document generation
        pdfDocument.SaveAs("CustomizedDocument.pdf");
    }
}
Private obj As New PdfGenerationWithAttributes()
obj.GeneratePdf()
' Define the DocumentMetadataAttribute
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'public class DocumentMetadataAttribute : Attribute
'{
'	public string Title
'	{
'		get;
'		set;
'	}
'	public string Author
'	{
'		get;
'		set;
'	}
'	public string Subject
'	{
'		get;
'		set;
'	}
'}
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'[DocumentMetadata(Title = "Custom PDF Title", Author = "John Doe", Subject = "Document Subject")]
'public class PdfGenerationWithAttributes
'{
'	public void GeneratePdf()
'	{
'		' Instantiate IronPDF PdfDocument
'		var pdfDocument = New PdfDocument("StyledDocument.pdf");
'		' Retrieve DocumentMetadataAttribute using reflection
'		var documentMetadata = TryCast(typeof(PdfGenerationWithAttributes).GetCustomAttributes(typeof(DocumentMetadataAttribute), False).FirstOrDefault(), DocumentMetadataAttribute);
'		' Set metadata values
'		pdfDocument.MetaData.Title = If(documentMetadata Is Nothing, Nothing, documentMetadata.Title);
'		pdfDocument.MetaData.Author = If(documentMetadata Is Nothing, Nothing, documentMetadata.Author);
'		pdfDocument.MetaData.Subject = If(documentMetadata Is Nothing, Nothing, documentMetadata.Subject);
'		' Perform document generation
'		pdfDocument.SaveAs("CustomizedDocument.pdf");
'	}
'}
VB   C#

En este ejemplo, el atributo DocumentMetadataAttribute sirve como atributo personalizado para transmitir información de metadatos, lo que permite una personalización dinámica durante la generación del PDF. El código proporcionado define una clase de atributo personalizada denominada DocumentMetadataAttribute en C#. Los atributos son una forma de añadir metadatos o información declarativa a entidades del programa como clases, métodos o propiedades. Estos atributos se utilizan después para editar los MetaData de un documento PDF mediante reflexión.

Atributos de C# (cómo funciona para el desarrollador): Figura 2 - Visualización de los metadatos del PDF generado a través de 'Propiedades del documento'

2. Control del diseño del PDF con atributos

Los atributos también pueden utilizarse para controlar el diseño del documento PDF. IronPDF ofrece opciones para configurar el tamaño de página, los márgenes y la orientación. Mediante el uso de atributos, puede parametrizar estos ajustes de diseño en función de requisitos específicos:

[PageLayout(Size = IronPdf.Rendering.PdfPaperSize.A4, MarginTop = 20, MarginBottom = 20, MarginLeft = 10, MarginRight = 10)]
public class PdfGenerationWithLayoutAttributes
{
    public void GeneratePdf()
    {
        // Instantiate IronPDF PdfDocument
        var pdfDocument = new ChromePdfRenderer();
        // Retrieve PageLayoutAttribute using reflection
        var pageLayout = typeof(PdfGenerationWithLayoutAttributes)
            .GetCustomAttributes(typeof(PageLayoutAttribute), false)
            .FirstOrDefault() as PageLayoutAttribute;
        // Set layout values
        pdfDocument.RenderingOptions.PaperSize = pageLayout?.Size;
        pdfDocument.RenderingOptions.MarginTop = pageLayout?.MarginTop ?? 0;
        pdfDocument.RenderingOptions.MarginBottom = pageLayout?.MarginBottom ?? 0;
        pdfDocument.RenderingOptions.MarginLeft = pageLayout?.MarginLeft ?? 0;
        pdfDocument.RenderingOptions.MarginRight = pageLayout?.MarginRight ?? 0;
        // Perform document generation
        pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomLayoutDocument.pdf");
    }
}
[PageLayout(Size = IronPdf.Rendering.PdfPaperSize.A4, MarginTop = 20, MarginBottom = 20, MarginLeft = 10, MarginRight = 10)]
public class PdfGenerationWithLayoutAttributes
{
    public void GeneratePdf()
    {
        // Instantiate IronPDF PdfDocument
        var pdfDocument = new ChromePdfRenderer();
        // Retrieve PageLayoutAttribute using reflection
        var pageLayout = typeof(PdfGenerationWithLayoutAttributes)
            .GetCustomAttributes(typeof(PageLayoutAttribute), false)
            .FirstOrDefault() as PageLayoutAttribute;
        // Set layout values
        pdfDocument.RenderingOptions.PaperSize = pageLayout?.Size;
        pdfDocument.RenderingOptions.MarginTop = pageLayout?.MarginTop ?? 0;
        pdfDocument.RenderingOptions.MarginBottom = pageLayout?.MarginBottom ?? 0;
        pdfDocument.RenderingOptions.MarginLeft = pageLayout?.MarginLeft ?? 0;
        pdfDocument.RenderingOptions.MarginRight = pageLayout?.MarginRight ?? 0;
        // Perform document generation
        pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomLayoutDocument.pdf");
    }
}
<PageLayout(Size := IronPdf.Rendering.PdfPaperSize.A4, MarginTop := 20, MarginBottom := 20, MarginLeft := 10, MarginRight := 10)>
Public Class PdfGenerationWithLayoutAttributes
	Public Sub GeneratePdf()
		' Instantiate IronPDF PdfDocument
		Dim pdfDocument = New ChromePdfRenderer()
		' Retrieve PageLayoutAttribute using reflection
		Dim pageLayout = TryCast(GetType(PdfGenerationWithLayoutAttributes).GetCustomAttributes(GetType(PageLayoutAttribute), False).FirstOrDefault(), PageLayoutAttribute)
		' Set layout values
		pdfDocument.RenderingOptions.PaperSize = pageLayout?.Size
		pdfDocument.RenderingOptions.MarginTop = If(pageLayout?.MarginTop, 0)
		pdfDocument.RenderingOptions.MarginBottom = If(pageLayout?.MarginBottom, 0)
		pdfDocument.RenderingOptions.MarginLeft = If(pageLayout?.MarginLeft, 0)
		pdfDocument.RenderingOptions.MarginRight = If(pageLayout?.MarginRight, 0)
		' Perform document generation
		pdfDocument.RenderHtmlAsPdf("<html><body><h1>Hello, IronPDF!</h1></body></html>").SaveAs("CustomLayoutDocument.pdf")
	End Sub
End Class
VB   C#

En este ejemplo, el atributo PageLayoutAttribute se utiliza para encapsular la configuración del diseño de página, permitiendo ajustes dinámicos basados en los valores del atributo.

Conclusión

En conclusión, los atributos de C# son un mecanismo inestimable para incrustar metadatos en el código e influir en el modo en que las herramientas, los compiladores y los entornos de ejecución interpretan y procesan ese código. Tanto si utilizan atributos integrados como si crean atributos personalizados, los desarrolladores pueden aprovechar los atributos para mejorar la expresividad del código, permitir la integración de herramientas y modelar el comportamiento de sus aplicaciones.

La integración de atributos C# con IronPDF abre vías para una generación de PDF más matizada y dinámica. Tanto si se trata de personalizar metadatos como de ajustar la configuración del diseño, los atributos proporcionan un enfoque declarativo para mejorar las capacidades de IronPDF. Mientras explora las posibilidades, considere las necesidades específicas de sus tareas de generación de PDF y cómo los atributos pueden contribuir a un proceso más personalizado y eficaz con IronPDF.

IronPDF es gratuito para el desarrollo con algunas limitaciones que puede desbloquear con unlicencia para la prueba completa de la funcionalidad de IronPDF.

< ANTERIOR
C# String.Format (Cómo funciona para desarrolladores)
SIGUIENTE >
C# Delegates (Cómo funciona para los desarrolladores)

¿Listo para empezar? Versión: 2024.12 acaba de salir

Descarga gratuita de NuGet Descargas totales: 11,622,374 Ver licencias >