Freigeben über


ContextStack-Klasse

Stellt ein Stapelobjekt zur Verfügung, das von einem Serialisierungsprogramm verwendet werden kann, um geschachtelten Serialisierungsprogrammen Informationen zur Verfügung zu stellen.

Namespace: System.ComponentModel.Design.Serialization
Assembly: System (in system.dll)

Syntax

'Declaration
Public NotInheritable Class ContextStack
'Usage
Dim instance As ContextStack
public sealed class ContextStack
public ref class ContextStack sealed
public final class ContextStack
public final class ContextStack

Hinweise

Einige Serialisierungsprogramme erfordern Informationen über den Kontext eines Objekts, um ihren Zustand ordnungsgemäß beizubehalten. Mithilfe der ContextStack-Klasse können Serialisierungsprogramme Daten für den Kontext des serialisierten Objekts auf einen Stapel festlegen, sodass andere Serialisierungsprogramme darauf zugreifen können. Der Wert der Context-Eigenschaft wird durch eine IDesignerSerializationManager-Schnittstelle bereitgestellt, um die verwendeten Informationen für andere Serialisierungsprogramme freizugeben.

Ein Kontextstapel ist nützlich, weil der Vorgang der Serialisierung eines Designdokuments mehrfach verschachtelt sein kann und Objekte auf jeder Verschachtelungsebene Kontextinformationen benötigen können, um den Zustand des Objekts korrekt beibehalten zu können. Ein Serialisierungsprogramm kann ein Kontextobjekt auf den Stapel festlegen, bevor ein geschachteltes Serialisierungsprogramm aufgerufen wird. Alle Objekte, die für den Stapel festgelegt sind, sollten von dem Serialisierungsprogramm entfernt werden, das sie festgelegt hat, nachdem ein Aufruf eines geschachtelten Serialisierungsprogramms beendet wurde.

Üblicherweise enthalten die Objekte auf einem Stapel Informationen über den Kontext des aktuellen Objekts, das serialisiert wird. Ein übergeordnetes Serialisierungsprogramm fügt dem Stapel Kontextinformationen über das nächste hinzuzufügende Objekt hinzu, ruft ein geeignetes Serialisierungsprogramm auf und entfernt nach dem Beenden der Ausführung für das Objekt die Kontextinformationen vom Stapel. Die Implementierung jedes einzelnen Serialisierungsprogramms bestimmt, welche Objekte auf diesen Stapel gelegt werden.

Beispielsweise verfügt ein Objekt mit einer Enabled-Eigenschaft über einen Datentyp von Boolean. Wenn ein Serialisierungsprogramm diesen Wert in einen Datenstream schreibt, muss ggf. der Kontext oder Typ der zu schreibenden Eigenschaft mit eingeschlossen werden. Das Serialisierungsprogramm verfügt jedoch nicht über diese Informationen, da es nur angewiesen wurde, den Wert für die Boolean-Struktur zu schreiben. Um diese Informationen für ein Serialisierungsprogramm verfügbar zu machen, kann das übergeordnete Serialisierungsprogramm eine PropertyDescriptor-Klasse ablegen, die auf die Enabled-Eigenschaft auf dem Kontextstapel zeigt.

Hinweis

Das auf diese Klasse angewendete HostProtectionAttribute-Attribut besitzt den Resources-Eigenschaftenwert SharedState. Das HostProtectionAttribute hat keine Auswirkungen auf Desktopanwendungen (die normalerweise durch Doppelklicken auf ein Symbol, Eingeben eines Befehls oder eines URL in einem Browser gestartet werden). Weitere Informationen finden Sie unter der HostProtectionAttribute-Klasse oder unter SQL Server-Programmierung und Hostschutzattribute.

Beispiel

Im folgenden Codebeispiel wird die Verwendung der ContextStack-Klasse veranschaulicht, mit der zehn Werte abgelegt und anschließend entfernt werden.

Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Design
Imports System.ComponentModel.Design.Serialization

Module ContextStackExample

    Sub Main()
        ' Create a ContextStack.
        Dim stack As New ContextStack

        ' Push ten items on to the stack and output the value of each.
        Dim number As Integer
        For number = 0 To 9
            Console.WriteLine(("Value pushed to stack: " + number.ToString()))
            stack.Push(number)
        Next number

        ' Pop each item off the stack.        
        Dim item As Object = stack.Pop()
        While Not item Is Nothing
            Console.WriteLine(("Value popped from stack: " + item.ToString()))
            item = stack.Pop()
        End While
    End Sub

End Module
using System;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.ComponentModel.Design.Serialization;
using System.Windows.Forms;

namespace ContextStackExample
{
    class ContextStackExample
    {
        [STAThread]
        static void Main(string[] args)
        {            
            // Create a ContextStack.
            ContextStack stack = new ContextStack();
            
            // Push ten items on to the stack and output the value of each.
            for( int number = 0; number < 10; number ++ )
            {
                Console.WriteLine( "Value pushed to stack: "+number.ToString() );
                stack.Push( number );
            }

            // Pop each item off the stack.
            object item = null;
            while( (item = stack.Pop()) != null )
                Console.WriteLine( "Value popped from stack: "+item.ToString() );
        }
    }
}
#using <System.Windows.Forms.dll>
#using <System.dll>

using namespace System;
using namespace System::ComponentModel;
using namespace System::ComponentModel::Design;
using namespace System::ComponentModel::Design::Serialization;
using namespace System::Windows::Forms;

int main()
{
   // Create a ContextStack.
   ContextStack^ stack = gcnew ContextStack;
   
   // Push ten items on to the stack and output the value of each.
   for ( int number = 0; number < 10; number++ )
   {
      Console::WriteLine( "Value pushed to stack: {0}", number );
      stack->Push( number );
   }
   
   // Pop each item off the stack.
   Object^ item = nullptr;
   while ( (item = stack->Pop()) != 0 )
      Console::WriteLine( "Value popped from stack: {0}", item );
}

.NET Framework-Sicherheit

Vererbungshierarchie

System.Object
  System.ComponentModel.Design.Serialization.ContextStack

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

ContextStack-Member
System.ComponentModel.Design.Serialization-Namespace
IDesignerSerializationManager