ContextStack クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
入れ子のシリアライザーで情報を使用できるように、シリアライザーによって使用するスタック オブジェクトを提供します。
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 みのみが指示されているため、この情報はありません。 この情報をシリアライザーに提供するために、親シリアライザーはコンテキスト スタックの プロパティを指す をEnabled
プッシュPropertyDescriptorできます。
コンストラクター
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) |
適用対象
こちらもご覧ください
.NET