Cómo: Obtener propiedades de un objeto de sistema de impresión sin reflexión
El uso de la reflexión para detallar las propiedades (y los tipos de esas propiedades) en un objeto puede ralentizar el rendimiento de la aplicación. El espacio de nombres System.Printing.IndexedProperties proporciona un medio para obtener esta información sin usar la reflexión.
Ejemplo
Estos son los pasos para hacerlo.
Cree una instancia del tipo. En el ejemplo siguiente, el tipo es el tipo PrintQueue que viene con Microsoft .NET Framework, pero un código casi idéntico debería funcionar para los tipos que se derivan de PrintSystemObject.
Cree un PrintPropertyDictionary a partir del PropertiesCollection del tipo. La propiedad Value de cada entrada de este diccionario es un objeto de uno de los tipos derivados de PrintProperty.
Enumere los miembros del diccionario. Para cada uno de ellos, realice lo siguiente.
Aumente el valor de cada entrada a PrintProperty y úselo para crear un objeto PrintProperty.
Obtenga el tipo del Value de cada uno de los PrintProperty objetos.
// 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()
Vea también
.NET Desktop feedback