Delen via


Hoe te: Eigenschappen van afdruksysteemobject ophalen zonder reflectie

Het gebruik van weerspiegeling om de eigenschappen (en de typen van deze eigenschappen) op een object te itemiseren, kan de prestaties van de toepassing vertragen. De System.Printing.IndexedProperties naamruimte biedt een middel om deze informatie op te halen zonder reflectie te gebruiken.

Voorbeeld

De stappen hiervoor zijn als volgt.

  1. Maak een exemplaar van het type. In het onderstaande voorbeeld is het type het PrintQueue type dat wordt geleverd met Microsoft .NET Framework, maar bijna identieke code moet werken voor typen die u hebt afgeleid van PrintSystemObject.

  2. Maak een PrintPropertyDictionary op basis van de PropertiesCollectionvan het type. De eigenschap Value van elke vermelding in deze woordenlijst is een object van een van de typen die zijn afgeleid van PrintProperty.

  3. De leden van de woordenlijst opsommen. Ga voor elk van deze handelingen als volgt te werk.

  4. Cast de waarde van elke vermelding naar PrintProperty en gebruik deze om een PrintProperty-object te maken.

  5. Het type Value van elk van het PrintProperty-object ophalen.


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

Zie ook