방법: 리플렉션을 사용하지 않고 인쇄 시스템 개체 속성 가져오기
리플렉션을 사용하여 개체의 속성(및 해당 속성의 형식)을 항목별로 구분하면 애플리케이션 성능이 저하될 수 있습니다. System.Printing.IndexedProperties 네임스페이스는 리플렉션을 사용하지 않고 이 정보를 가져오는 수단을 제공합니다.
예제
이 작업을 수행하는 단계는 다음과 같습니다.
형식의 인스턴스를 만듭니다. 아래 예제에서 형식은 Microsoft .NET Framework와 함께 제공되는 PrintQueue 형식이지만 거의 동일한 코드가 PrintSystemObject에서 파생되는 형식에서 작동해야 합니다.
형식의 PropertiesCollection에서 PrintPropertyDictionary를 만듭니다. 이 사전에 있는 각 항목의 Value 속성은 PrintProperty에서 파생된 형식 중 하나의 개체입니다.
사전의 멤버를 열거합니다. 각 멤버에 대해 다음을 수행합니다.
각 항목의 값을 PrintProperty로 업캐스트하고 이를 사용하여 PrintProperty 개체를 만듭니다.
각 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()
참고 항목
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET Desktop feedback