Freigeben über


Gewusst wie: Abrufen von Drucksystemobjekt-Eigenschaften ohne Reflektion

Mithilfe von Spiegelung können die Eigenschaften (und die Typen dieser Eigenschaften) in einem Objekt die Anwendungsleistung langsam werden. Der System.Printing.IndexedProperties-Namespace bietet eine Möglichkeit, diese Informationen ohne Reflektion abzurufen.

Beispiel

Die Schritte für die Vorgehensweise sind wie folgt.

  1. Erstellen Sie eine Instanz des Typs. Im folgenden Beispiel ist der Typ der PrintQueue-Typ, der mit Microsoft .NET Framework ausgeliefert wird, aber fast identischer Code sollte für Typen funktionieren, die Ihr Gerät von PrintSystemObject ableitet.

  2. Erstellen Sie eine PrintPropertyDictionary aus dem PropertiesCollection des Typs. Die Value-Eigenschaft jedes Eintrags in diesem Wörterbuch ist ein Objekt eines der Typen, die von PrintProperty abgeleitet werden.

  3. Enumerieren Sie die Members des Wörterbuchs. Führen Sie für jede dieser Elemente die folgenden Schritte aus.

  4. Der Wert jedes Eintrags PrintProperty wird nach oben umgewandelt und verwendet, um ein PrintProperty-Objekt zu erstellen.

  5. Rufen Sie den Typ der Value jedes einzelnen PrintProperty-Objekts ab.


// 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()

Weitere Informationen