Partager via


Comment : obtenir les propriétés de l'objet de système d'impression sans réflexion

L’utilisation de la réflexion pour itemiser les propriétés (et les types de ces propriétés) sur un objet peut ralentir les performances de l’application. L’espace System.Printing.IndexedProperties de noms fournit un moyen d’obtenir ces informations sans utiliser la réflexion.

Exemple

Les étapes à suivre sont les suivantes.

  1. Créez une instance du type . Dans l’exemple ci-dessous, le type est le PrintQueue type fourni avec Microsoft .NET Framework, mais le code presque identique doit fonctionner pour les types dont vous dérivez PrintSystemObject.

  2. Créez un PrintPropertyDictionary à partir du PropertiesCollectiontype . La Value propriété de chaque entrée dans ce dictionnaire est un objet de l’un des types dérivés de PrintProperty.

  3. Énumérez les membres du dictionnaire. Pour chacun d’eux, procédez comme suit.

  4. Effectuer un cast up-cast de la valeur de chaque entrée PrintProperty et l’utiliser pour créer un PrintProperty objet.

  5. Obtenez le type de Value chacun de l’objet PrintProperty .


// Enumerate the properties, and their types, of a queue without using Reflection
LocalPrintServer localPrintServer = new LocalPrintServer();
PrintQueue defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue();

PrintPropertyDictionary printQueueProperties = defaultPrintQueue.PropertiesCollection;

Console.WriteLine("These are the properties, and their types, of {0}, a {1}", defaultPrintQueue.Name, defaultPrintQueue.GetType().ToString() +"\n");

foreach (DictionaryEntry entry in printQueueProperties)
{
    PrintProperty property = (PrintProperty)entry.Value;

    if (property.Value != null)
    {
        Console.WriteLine(property.Name + "\t(Type: {0})", property.Value.GetType().ToString());
    }
}
Console.WriteLine("\n\nPress Return to continue...");
Console.ReadLine();


' Enumerate the properties, and their types, of a queue without using Reflection
Dim localPrintServer As New LocalPrintServer()
Dim defaultPrintQueue As PrintQueue = LocalPrintServer.GetDefaultPrintQueue()

Dim printQueueProperties As PrintPropertyDictionary = defaultPrintQueue.PropertiesCollection

Console.WriteLine("These are the properties, and their types, of {0}, a {1}", defaultPrintQueue.Name, defaultPrintQueue.GetType().ToString() + vbLf)

For Each entry As DictionaryEntry In printQueueProperties
    Dim [property] As PrintProperty = CType(entry.Value, PrintProperty)

    If [property].Value IsNot Nothing Then
        Console.WriteLine([property].Name & vbTab & "(Type: {0})", [property].Value.GetType().ToString())
    End If
Next entry
Console.WriteLine(vbLf & vbLf & "Press Return to continue...")
Console.ReadLine()

Voir aussi