Sdílet prostřednictvím


ContextStack Třída

Definice

Poskytuje objekt zásobníku, který lze použít serializátor k zpřístupnění informací pro vnořené serializátory.

public ref class ContextStack sealed
public sealed class ContextStack
type ContextStack = class
Public NotInheritable Class ContextStack
Dědičnost
ContextStack

Příklady

Následující příklad kódu ukazuje použití ContextStack k nasdílení a následné odebrání 10 hodnot.

#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 );
}
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() );
        }
    }
}
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 item IsNot Nothing
            Console.WriteLine(("Value popped from stack: " + item.ToString()))
            item = stack.Pop()
        End While
    End Sub

End Module

Poznámky

Některé serializátory vyžadují informace o kontextu objektu správně zachovat jejich stav. ContextStack Třída umožňuje serializátoru nastavit data o kontextu objektu, který je serializován do zásobníku, kde k němu může přistupovat jiný serializátor. Hodnota Context vlastnosti je poskytována IDesignerSerializationManager sdílení informací o použití některých serializátorů.

Zásobník kontextu je užitečný, protože proces serializace návrhového dokumentu může být hluboce vnořený a objekty na každé úrovni vnoření mohou vyžadovat informace o kontextu, aby se správně zachoval stav objektu. Serializátor může před vyvoláním vnořeného serializátoru nastavit objekt kontextu do zásobníku. Každý objekt nastavený na zásobník by měl být odebrán serializátorem, který jej nastavil po volání vnořené serializátor vrátí.

Objekty v zásobníku obvykle obsahují informace o kontextu aktuálního objektu, který je serializován. Nadřazený serializátor přidává kontextové informace do zásobníku o dalším objektu, který má být serializován, volá odpovídající serializátor a při dokončení serializátoru na objektu odebere kontextové informace ze zásobníku. Je až do implementace každého serializátoru určit, které objekty se nasdílí do tohoto zásobníku.

Například objekt s pojmenovanou Enabled vlastností má datový typ Boolean. Pokud serializátor zapíše tuto hodnotu do datového proudu, může být nutné zahrnout kontext nebo typ vlastnosti, kterou píše. Serializátor však tyto informace nemá, protože je instruován pouze k zápisu Boolean hodnoty. Chcete-li poskytnout tyto informace serializátoru, nadřazený serializátor může odeslat PropertyDescriptor odkaz na Enabled vlastnost v kontextovém zásobníku.

Konstruktory

Name Description
ContextStack()

Inicializuje novou instanci ContextStack třídy.

Vlastnosti

Name Description
Current

Získá aktuální objekt v zásobníku.

Item[Int32]

Získá objekt v zásobníku na zadané úrovni.

Item[Type]

Získá první objekt v zásobníku, který dědí z nebo implementuje zadaný typ.

Metody

Name Description
Append(Object)

Připojí objekt na konec zásobníku a ne nasdílí ho na začátek zásobníku.

Equals(Object)

Určuje, zda je zadaný objekt roven aktuálnímu objektu.

(Zděděno od Object)
GetHashCode()

Slouží jako výchozí funkce hash.

(Zděděno od Object)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
Pop()

Odebere aktuální objekt ze zásobníku a vrátí jeho hodnotu.

Push(Object)

Nasdílí nebo umístí zadaný objekt do zásobníku.

ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Platí pro

Viz také