다음을 통해 공유


방법: 리플렉션을 사용하지 않고 인쇄 시스템 개체 속성 가져오기

리플렉션을 사용하여 개체의 속성(및 해당 속성의 형식)을 항목별로 구분하면 애플리케이션 성능이 저하될 수 있습니다. System.Printing.IndexedProperties 네임스페이스는 리플렉션을 사용하지 않고 이 정보를 가져오는 수단을 제공합니다.

예제

이 작업을 수행하는 단계는 다음과 같습니다.

  1. 형식의 인스턴스를 만듭니다. 아래 예제에서 형식은 Microsoft .NET Framework와 함께 제공되는 PrintQueue 형식이지만 거의 동일한 코드가 PrintSystemObject에서 파생되는 형식에서 작동해야 합니다.

  2. 형식의 PropertiesCollection에서 PrintPropertyDictionary를 만듭니다. 이 사전에 있는 각 항목의 Value 속성은 PrintProperty에서 파생된 형식 중 하나의 개체입니다.

  3. 사전의 멤버를 열거합니다. 각 멤버에 대해 다음을 수행합니다.

  4. 각 항목의 값을 PrintProperty로 업캐스트하고 이를 사용하여 PrintProperty 개체를 만듭니다.

  5. PrintProperty 개체의 Value 형식을 가져옵니다.


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

참고 항목