Поделиться через


ContextStack Класс

Определение

Содержит объект стека, который может использоваться сериализатором для обеспечения доступности данных вложенным сериализаторам.

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

Примеры

В следующем примере кода демонстрируется использование ContextStack для отправки и удаления 10 значений.

#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

Комментарии

Некоторым сериализаторам требуется информация о контексте объекта, чтобы правильно сохранить их состояние. Класс ContextStack позволяет сериализатору задавать данные о контексте объекта, сериализуемого в стек, в котором другой сериализатор может получить к нему доступ. Значение Context свойства предоставляется классом для IDesignerSerializationManager предоставления сведений об использовании некоторым сериализаторам.

Контекстный стек полезен, так как процесс сериализации документа разработки может быть глубоко вложенным, а объекты на каждом уровне вложения могут требовать контекстных сведений для правильного сохранения состояния объекта. Сериализатор может задать объект контекста для стека перед вызовом вложенного сериализатора. Каждый объект, заданный в стеке, должен быть удален сериализатором, который устанавливает его после вызова вложенного сериализатора.

Как правило, объекты в стеке содержат сведения о контексте текущего сериализуемого объекта. Родительский сериализатор добавляет в стек сведения о контексте следующего объекта, который необходимо сериализовать, вызывает соответствующий сериализатор и, когда сериализатор завершает выполнение над объектом, удаляет сведения контекста из стека. Реализация каждого сериализатора зависит от того, какие объекты отправляются в этот стек.

Например, объект со свойством с именем Enabled имеет тип Booleanданных . Если сериализатор записывает это значение в поток данных, ему может потребоваться включить контекст или тип свойства, которое он записывает. Сериализатор, однако, не имеет этих сведений, так как ему предписывается только записать Boolean значение. Чтобы предоставить эти сведения сериализатору, родительский сериализатор может отправить объект , указывающий PropertyDescriptorEnabled на свойство в контекстном стеке.

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

ContextStack()

Инициализирует новый экземпляр класса ContextStack.

Свойства

Current

Возвращает текущий объект в стеке.

Item[Int32]

Возвращает объект стека на указанном уровне.

Item[Type]

Возвращает первый объект стека, который наследует или использует заданный тип.

Методы

Append(Object)

Добавляет объект в конец стека, но не отправляет его на верх стека.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

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

Служит хэш-функцией по умолчанию.

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

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

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

Создает неполную копию текущего объекта Object.

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

Удаляет текущий объект из стека, возвращая его значение.

Push(Object)

Отправляет или помещает указанный объект в стек.

ToString()

Возвращает строку, представляющую текущий объект.

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

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

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