AIDE .NET

Réflexion C# (Comment cela fonctionne pour les développeurs)

Chaknith Bin
Chaknith Bin
janvier 27, 2024
Partager:

Dans le monde du développement de logiciels, C# est un langage de programmation polyvalent et puissant qui offre un large éventail de fonctionnalités aux développeurs.

La réflexion est l'une de ces caractéristiques qui se distingue par sa flexibilité et son dynamisme. La réflexion en C# permet aux développeurs d'inspecter et d'interagir avec les métadonnées des types pendant l'exécution. Cette capacité ouvre une nouvelle dimension de possibilités, permettant aux développeurs de créer des applications plus flexibles, extensibles et robustes.

Dans cet article, nous allons nous plonger dans les subtilités de la réflexion en C#, en explorant ses concepts clés, ses cas d'utilisation et ses meilleures pratiques. Nous trouverons également les informations de réflexion de l'objet PdfDocument d'IronPDF.

Réflexion en C# ;

La réflexion est un mécanisme qui permet à un programme d'examiner et de manipuler sa structure et son comportement à l'exécution. En C#, cela est réalisé grâce à l'espace de noms System.Reflection qui fournit des classes et des méthodes pour interagir avec les métadonnées, obtenir des informations sur les types, et même créer des instances de manière dynamique.

Principaux éléments de la réflexion

Type Classe

Au cœur de la réflexion C#, on trouve la classe Type, qui représente un type dans le runtime .NET. Cette classe fournit une mine d'informations sur un type, y compris tous les méthodes publiques, propriétés, champs, événements et paramètres de méthode.

Vous pouvez obtenir un objet Type pour un type donné en utilisant différentes méthodes, comme l'opérateur typeof() ou en appelant la méthode GetType() sur un objet.

using System;

class Program
{
    static void Main()
    {
        // Using typeof to get Type information for string
        Type stringType = typeof(string);
        Console.WriteLine("Information about the string type:");
        Console.WriteLine($"Type Name: {stringType.Name}");
        Console.WriteLine($"Full Name: {stringType.FullName}");
        Console.WriteLine($"Assembly Qualified Name: {stringType.AssemblyQualifiedName}");
    }
}
using System;

class Program
{
    static void Main()
    {
        // Using typeof to get Type information for string
        Type stringType = typeof(string);
        Console.WriteLine("Information about the string type:");
        Console.WriteLine($"Type Name: {stringType.Name}");
        Console.WriteLine($"Full Name: {stringType.FullName}");
        Console.WriteLine($"Assembly Qualified Name: {stringType.AssemblyQualifiedName}");
    }
}
Imports System

Friend Class Program
	Shared Sub Main()
		' Using typeof to get Type information for string
		Dim stringType As Type = GetType(String)
		Console.WriteLine("Information about the string type:")
		Console.WriteLine($"Type Name: {stringType.Name}")
		Console.WriteLine($"Full Name: {stringType.FullName}")
		Console.WriteLine($"Assembly Qualified Name: {stringType.AssemblyQualifiedName}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Sortie

Réflexion C# (Comment Cela Fonctionne pour le Développeur) : Figure 1

Classe d'assemblage

Dans .NET, un assemblage est une unité de déploiement et de gestion des versions. La classe Assembly dans l'espace de noms System.Reflection fournit des méthodes pour charger et décrire des assemblages, et inspecter les informations sur les assemblages de manière dynamique.

Vous pouvez obtenir un objet Assembly pour toute instance de l'assembly en cours d'exécution ou de tout assembly référencé.

using System;
using System.Reflection;

class Program
{
    static void Main()
    {
        // Example 1: Get information about the executing assembly
        Assembly executingAssembly = Assembly.GetExecutingAssembly();
        Console.WriteLine("Information about the executing assembly:");
        DisplayAssemblyInfo(executingAssembly);

        // Example 2: Load the mscorlib assembly
        Assembly mscorlibAssembly = Assembly.Load("mscorlib");
        Console.WriteLine("\nInformation about the mscorlib assembly:");
        DisplayAssemblyInfo(mscorlibAssembly);
    }

    static void DisplayAssemblyInfo(Assembly assembly)
    {
        Console.WriteLine($"Assembly Name: {assembly.GetName().Name}");
        Console.WriteLine($"Full Name: {assembly.FullName}");
        Console.WriteLine($"Location: {assembly.Location}");
        Console.WriteLine("\nModules:");

        foreach (var module in assembly.GetModules())
        {
            Console.WriteLine($"- {module.Name}");
        }

        Console.WriteLine(new string('-', 30));
    }
}
using System;
using System.Reflection;

class Program
{
    static void Main()
    {
        // Example 1: Get information about the executing assembly
        Assembly executingAssembly = Assembly.GetExecutingAssembly();
        Console.WriteLine("Information about the executing assembly:");
        DisplayAssemblyInfo(executingAssembly);

        // Example 2: Load the mscorlib assembly
        Assembly mscorlibAssembly = Assembly.Load("mscorlib");
        Console.WriteLine("\nInformation about the mscorlib assembly:");
        DisplayAssemblyInfo(mscorlibAssembly);
    }

    static void DisplayAssemblyInfo(Assembly assembly)
    {
        Console.WriteLine($"Assembly Name: {assembly.GetName().Name}");
        Console.WriteLine($"Full Name: {assembly.FullName}");
        Console.WriteLine($"Location: {assembly.Location}");
        Console.WriteLine("\nModules:");

        foreach (var module in assembly.GetModules())
        {
            Console.WriteLine($"- {module.Name}");
        }

        Console.WriteLine(new string('-', 30));
    }
}
Imports Microsoft.VisualBasic
Imports System
Imports System.Reflection

Friend Class Program
	Shared Sub Main()
		' Example 1: Get information about the executing assembly
		Dim executingAssembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
		Console.WriteLine("Information about the executing assembly:")
		DisplayAssemblyInfo(executingAssembly)

		' Example 2: Load the mscorlib assembly
		Dim mscorlibAssembly As System.Reflection.Assembly = System.Reflection.Assembly.Load("mscorlib")
		Console.WriteLine(vbLf & "Information about the mscorlib assembly:")
		DisplayAssemblyInfo(mscorlibAssembly)
	End Sub

	Private Shared Sub DisplayAssemblyInfo(ByVal assembly As System.Reflection.Assembly)
		Console.WriteLine($"Assembly Name: {assembly.GetName().Name}")
		Console.WriteLine($"Full Name: {assembly.FullName}")
		Console.WriteLine($"Location: {assembly.Location}")
		Console.WriteLine(vbLf & "Modules:")

		For Each [module] In assembly.GetModules()
			Console.WriteLine($"- {[module].Name}")
		Next [module]

		Console.WriteLine(New String("-"c, 30))
	End Sub
End Class
$vbLabelText   $csharpLabel

Sortie

Réflexion en C# (Comment ça fonctionne pour le développeur) : Figure 2

Classes MethodInfo, PropertyInfo, FieldInfo et EventInfo

Ces classes représentent respectivement les membres publics, les méthodes, les propriétés, les champs et les événements. Ils exposent des informations sur ces membres, telles que leur nom, leur type, leur accessibilité, etc.

Vous pouvez obtenir l'accès aux instances de ces classes via la classe Type.

using System;
using System.Reflection;

class MyClass
{
    public void MyMethod() { }
    public int MyProperty { get; set; }
    public string myField;
    public event EventHandler MyEvent;
}

class Program
{
    static void Main()
    {
        // Get MethodInfo for MyMethod
        MethodInfo methodInfo = typeof(MyClass).GetMethod("MyMethod");
        Console.WriteLine($"Method Name: {methodInfo.Name}");

        // Get PropertyInfo for MyProperty
        PropertyInfo propertyInfo = typeof(MyClass).GetProperty("MyProperty");
        Console.WriteLine($"Property Name: {propertyInfo.Name}");

        // Get FieldInfo for myField
        FieldInfo fieldInfo = typeof(MyClass).GetField("myField");
        Console.WriteLine($"Field Name: {fieldInfo.Name}");

        // Get EventInfo for MyEvent
        EventInfo eventInfo = typeof(MyClass).GetEvent("MyEvent");
        Console.WriteLine($"Event Name: {eventInfo.Name}");
    }
}
using System;
using System.Reflection;

class MyClass
{
    public void MyMethod() { }
    public int MyProperty { get; set; }
    public string myField;
    public event EventHandler MyEvent;
}

class Program
{
    static void Main()
    {
        // Get MethodInfo for MyMethod
        MethodInfo methodInfo = typeof(MyClass).GetMethod("MyMethod");
        Console.WriteLine($"Method Name: {methodInfo.Name}");

        // Get PropertyInfo for MyProperty
        PropertyInfo propertyInfo = typeof(MyClass).GetProperty("MyProperty");
        Console.WriteLine($"Property Name: {propertyInfo.Name}");

        // Get FieldInfo for myField
        FieldInfo fieldInfo = typeof(MyClass).GetField("myField");
        Console.WriteLine($"Field Name: {fieldInfo.Name}");

        // Get EventInfo for MyEvent
        EventInfo eventInfo = typeof(MyClass).GetEvent("MyEvent");
        Console.WriteLine($"Event Name: {eventInfo.Name}");
    }
}
Imports System
Imports System.Reflection

Friend Class [MyClass]
	Public Sub MyMethod()
	End Sub
	Public Property MyProperty() As Integer
	Public myField As String
	Public Event MyEvent As EventHandler
End Class

Friend Class Program
	Shared Sub Main()
		' Get MethodInfo for MyMethod
		Dim methodInfo As MethodInfo = GetType([MyClass]).GetMethod("MyMethod")
		Console.WriteLine($"Method Name: {methodInfo.Name}")

		' Get PropertyInfo for MyProperty
		Dim propertyInfo As PropertyInfo = GetType([MyClass]).GetProperty("MyProperty")
		Console.WriteLine($"Property Name: {propertyInfo.Name}")

		' Get FieldInfo for myField
		Dim fieldInfo As FieldInfo = GetType([MyClass]).GetField("myField")
		Console.WriteLine($"Field Name: {fieldInfo.Name}")

		' Get EventInfo for MyEvent
		Dim eventInfo As EventInfo = GetType([MyClass]).GetEvent("MyEvent")
		Console.WriteLine($"Event Name: {eventInfo.Name}")
	End Sub
End Class
$vbLabelText   $csharpLabel

Sortie

Réflexion C# (Comment cela fonctionne pour les développeurs) : Figure 3

Présentation d'IronPDF

IronPDF - Site Officiel est une bibliothèque C# puissante qui offre un ensemble complet de fonctionnalités pour travailler avec des documents PDF dans des applications .NET. Il permet aux développeurs de créer, de manipuler et d'extraire facilement des données d'un objet existant, tel qu'un fichier PDF, à l'aide d'une API simple et intuitive.

L'une des caractéristiques remarquables d'IronPDF est sa capacité à s'intégrer de manière transparente aux projets C# existants, ce qui en fait un excellent choix pour ajouter des capacités de génération et de manipulation de fichiers PDF.

Principales caractéristiques d'IronPDF

Les principales caractéristiques d'IronPDF sont les suivantes :

  1. Génération de PDF : Créez facilement des documents PDF à partir de zéro ou convertissez des formats HTML, images et autres en PDF.

  2. Manipulation de PDF : Modifiez les PDF existants en ajoutant, supprimant ou modifiant du texte, des images et des annotations.

  3. Extraction de PDF : Extrayez du texte, des images et des métadonnées à partir de fichiers PDF pour un traitement ultérieur.

  4. Conversion HTML en PDF : Convertissez le contenu HTML, y compris le CSS et le JavaScript, en PDF de haute qualité.

  5. Formulaires PDF : Créez et remplissez des formulaires PDF interactifs par programmation.

  6. Sécurité : Appliquez le chiffrement et la protection par mot de passe pour sécuriser les documents PDF.

    Voyons maintenant comment utiliser la réflexion en C# avec IronPDF à l'aide d'un exemple de code détaillé.

Utilisation de C# ; Réflexion avec IronPDF

Dans cet exemple simple, nous obtiendrons des informations sur l'objet document PDF IronPDF en utilisant la réflexion C#.

Installer le paquet NuGet IronPDF

Veillez à installer le package NuGet IronPDF dans votre projet. Vous pouvez le faire à l'aide de la console NuGet Package Manager :

Install-Package IronPdf

Utilisation de C# ; Reflection pour obtenir les données d'IronPDF PDF Document Object

using IronPdf;
using System;

Type PDF = typeof(PdfDocument);
Console.WriteLine("Information about the PdfDocument type:");
Console.WriteLine($"Type Name: {PDF.Name}");
Console.WriteLine($"Full Name: {PDF.FullName}");
Console.WriteLine($"Assembly Qualified Name: {PDF.AssemblyQualifiedName}");
Console.WriteLine("\nMembers:");
foreach (var memberInfo in PDF.GetMembers())
{
    Console.WriteLine($"{memberInfo.MemberType} {memberInfo.Name}");
}
using IronPdf;
using System;

Type PDF = typeof(PdfDocument);
Console.WriteLine("Information about the PdfDocument type:");
Console.WriteLine($"Type Name: {PDF.Name}");
Console.WriteLine($"Full Name: {PDF.FullName}");
Console.WriteLine($"Assembly Qualified Name: {PDF.AssemblyQualifiedName}");
Console.WriteLine("\nMembers:");
foreach (var memberInfo in PDF.GetMembers())
{
    Console.WriteLine($"{memberInfo.MemberType} {memberInfo.Name}");
}
Imports Microsoft.VisualBasic
Imports IronPdf
Imports System

Private PDF As Type = GetType(PdfDocument)
Console.WriteLine("Information about the PdfDocument type:")
Console.WriteLine($"Type Name: {PDF.Name}")
Console.WriteLine($"Full Name: {PDF.FullName}")
Console.WriteLine($"Assembly Qualified Name: {PDF.AssemblyQualifiedName}")
Console.WriteLine(vbLf & "Members:")
For Each memberInfo In PDF.GetMembers()
	Console.WriteLine($"{memberInfo.MemberType} {memberInfo.Name}")
Next memberInfo
$vbLabelText   $csharpLabel

Le code C# fourni utilise la réflexion pour obtenir des informations sur le type PdfDocument de la bibliothèque IronPDF. Initialement, l'expression typeof(PdfDocument) est utilisée pour récupérer l'objet Type représentant le type PdfDocument.

Ensuite, diverses propriétés de l'objet Type obtenu sont imprimées sur la console, y compris le nom du type, le nom complet et le nom qualifié d'assembly.

De plus, le code utilise une boucle foreach pour parcourir les membres du type PdfDocument, en affichant des informations sur chaque membre, telles que son type de membre et son nom.

Cette approche illustre l'utilisation de la réflexion pour inspecter dynamiquement la structure et les métadonnées des objets de type PdfDocument lors de l'exécution, fournissant des aperçus sur la composition et tous les membres publics de la classe PdfDocument de la bibliothèque IronPDF.

Sortie :

Réflexion C# (Comment cela fonctionne pour le développeur) : Figure 4

Conclusion

La réflexion en C# est un mécanisme puissant qui permet aux développeurs d'inspecter et de manipuler dynamiquement la structure des types au moment de l'exécution.

Cet article a exploré les concepts clés, les cas d'utilisation et les meilleures pratiques associés à la réflexion en C#, en soulignant son importance dans la création d'applications flexibles et extensibles.

De plus, l'intégration de IronPDF, une bibliothèque puissante de manipulation de PDF, démontre davantage la polyvalence de la réflexion C# dans l'obtention d'informations sur le type PdfDocument de manière dynamique.

En exploitant ces capacités, les développeurs acquièrent la souplesse nécessaire pour adapter leurs applications à l'évolution des besoins et des scénarios, ce qui témoigne de la nature dynamique de C# et de la contribution précieuse de bibliothèques telles qu'IronPDF à l'amélioration des capacités de traitement des documents.

IronPDF est une bibliothèque bien documentée, avec de nombreux tutoriels. Pour voir les tutoriels, visitez la documentation des tutoriels IronPDF, qui offre une plus grande opportunité aux développeurs d'apprendre à connaître ses fonctionnalités.

Chaknith Bin
Ingénieur logiciel
Chaknith travaille sur IronXL et IronBarcode. Il possède une expertise approfondie en C# et .NET, aidant à améliorer le logiciel et à soutenir les clients. Ses idées issues des interactions avec les utilisateurs contribuent à de meilleurs produits, une documentation améliorée et une expérience globale enrichie.
< PRÉCÉDENT
NPlot C# (Comment ça marche pour les développeurs)
SUIVANT >
Npgsql C# .NET (Comment cela fonctionne pour les développeurs)