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

スタック上の現在のオブジェクトを取得します。