ContextStack Класс

Определение

Содержит объект стека, который может использоваться сериализатором для обеспечения доступности данных вложенным сериализаторам.Provides a stack object that can be used by a serializer to make information available to nested serializers.

public ref class ContextStack sealed
public sealed class ContextStack
type ContextStack = class
Public NotInheritable Class ContextStack
Наследование
ContextStack

Примеры

В следующем примере кода показано использование ContextStack для отправки и удаления 10 значений.The following code example demonstrates using a ContextStack to push and then remove 10 values.

#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

Комментарии

Некоторым сериализаторам требуется информация о контексте объекта, чтобы правильно сохранить их состояние.Some serializers require information about the context of an object to correctly persist their state. ContextStackКласс позволяет сериализатору задавать данные о контексте объекта, который сериализуется в стек, где другой сериализатор может получить к нему доступ.The ContextStack class enables a serializer to set data about the context of an object that is being serialized to a stack where another serializer can access it. Значение Context свойства предоставляется в, IDesignerSerializationManager чтобы совместно использовать информацию для некоторых сериализаторов.The value of the Context property is provided by an IDesignerSerializationManager to share information of use to some serializers.

Стек контекста полезен, поскольку процесс сериализации документа проекта может быть глубоким вложенным, а объекты на каждом уровне вложенности могут потребовать сведения о контексте для правильного сохранения состояния объекта.A context stack is useful because the process of serializing a design document can be deeply nested, and objects at each level of nesting may require context information to correctly persist the state of the object. Сериализатор может установить объект контекста в стек перед вызовом вложенного сериализатора.A serializer can set a context object to the stack before invoking a nested serializer. Каждый объект, заданный для стека, должен быть удален сериализатором, который задали его после вызова вложенного сериализатора.Each object set to the stack should be removed by the serializer that set it after a call to a nested serializer returns.

Как правило, объекты в стеке содержат сведения о контексте текущего сериализуемого объекта.Typically, the objects on the stack contain information about the context of the current object that is being serialized. Родительский сериализатор добавляет сведения о контексте в стек о следующем объекте для сериализации, вызывает соответствующий сериализатор и, когда сериализатор завершает выполнение на объекте, удаляет сведения о контексте из стека.A parent serializer adds context information to the stack about the next object to be serialized, calls an appropriate serializer and, when the serializer finishes executing on the object, removes the context information from the stack. Чтобы определить, какие объекты передаются в стек, необходимо реализовать каждый сериализатор.It is up to the implementation of each serializer to determine what objects get pushed on this stack.

Например, объект с именем свойства Enabled имеет тип данных Boolean .As an example, an object with a property named Enabled has a data type of Boolean. Если сериализатор записывает это значение в поток данных, может потребоваться включить в него контекст или тип свойства, которое он пишет.If a serializer writes this value to a data stream, it might need to include the context or type of property it is writing. Однако у сериализатора нет этой информации, так как это дает указание только на запись Boolean значения.The serializer does not have this information, however, because it is only instructed to write the Boolean value. Чтобы предоставить эту информацию сериализатору, родительский сериализатор может отправить объект PropertyDescriptor , указывающий на Enabled свойство в стеке контекста.To provide this information to the serializer, the parent serializer can push a PropertyDescriptor that points to the Enabled property on the context stack.

Конструкторы

ContextStack()

Инициализирует новый экземпляр класса ContextStack.Initializes a new instance of the ContextStack class.

Свойства

Current

Возвращает текущий объект в стеке.Gets the current object on the stack.

Item[Int32]

Возвращает объект стека на указанном уровне.Gets the object on the stack at the specified level.

Item[Type]

Возвращает первый объект стека, который наследует или использует заданный тип.Gets the first object on the stack that inherits from or implements the specified type.

Методы

Append(Object)

Добавляет объект в конец стека, но не отправляет его на верх стека.Appends an object to the end of the stack, rather than pushing it onto the top of the stack.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.Determines whether the specified object is equal to the current object.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.Serves as the default hash function.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.Gets the Type of the current instance.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.Creates a shallow copy of the current Object.

(Унаследовано от Object)
Pop()

Удаляет текущий объект из стека, возвращая его значение.Removes the current object off of the stack, returning its value.

Push(Object)

Отправляет или помещает указанный объект в стек.Pushes, or places, the specified object onto the stack.

ToString()

Возвращает строку, представляющую текущий объект.Returns a string that represents the current object.

(Унаследовано от Object)

Применяется к

См. также раздел