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 значения. Чтобы предоставить эти сведения сериализатору, родительский сериализатор может отправить PropertyDescriptor свойство, указывающее на Enabled свойство в стеке контекста.
Конструкторы
| Имя | Описание |
|---|---|
| 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) |