ObjectManagerとは? わかりやすく解説

ObjectManager クラス

逆シリアル化されたオブジェクトを追跡します。

名前空間: System.Runtime.Serialization
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

<ComVisibleAttribute(True)> _
Public Class ObjectManager
Dim instance As ObjectManager
[ComVisibleAttribute(true)] 
public class ObjectManager
[ComVisibleAttribute(true)] 
public ref class ObjectManager
/** @attribute ComVisibleAttribute(true) */ 
public class ObjectManager
ComVisibleAttribute(true) 
public class ObjectManager
解説解説

逆シリアル化中に、Formatter は ObjectManager に照会して、シリアル化ストリームのオブジェクトへの参照が逆シリアル化済みのオブジェクトを参照しているのか (後方参照)、またはまだ逆シリアル化されていないオブジェクトを参照しているのか (前方参照) どうかを判断します。シリアル化ストリームの参照が前方参照である場合は、Formatter が ObjectManager によってフィックスアップを登録します。シリアル化ストリームの参照が後方参照である場合は、Formatter がすぐにその参照を完了します。フィックスアップとは、オブジェクトの逆シリアル化処理で、まだ完了していないオブジェクト参照を完了する処理を指します。要求したオブジェクトが逆シリアル化された後で、ObjectManager がその参照を完了します。

ObjectManager は、フィックスアップ順序を指示する一連の規則に従います。ISerializable を実装しているか、または ISerializationSurrogate を持っているすべてのオブジェクトは、オブジェクト ツリーが逆シリアル化されるときに使用できる SerializationInfo を使用して送信したオブジェクトをすべて持つことができます。ただし、親オブジェクトは、自らが完全に逆シリアル化されたときに、そのすべての子オブジェクトも完成されているとは仮定できません。すべての子オブジェクトは存在しますが、すべての孫オブジェクトが存在するとは限りません。オブジェクトがその子オブジェクトでのコードの実行に依存する、なんらかのアクションを実行する必要がある場合は、このアクションを延期し、IDeserializationCallback インターフェイスを実装して、このインターフェイスでコール バックされたときにだけコードを実行できます。

使用例使用例

ObjectManager クラスを使用して、各オブジェクトを一度だけ走査しながら、オブジェクト グラフを順をおって調べていく方法を次のコード例に示します。

using System;
using System.Text;
using System.Collections;
using System.Runtime.Serialization;
using System.Reflection;

// This class walks through all the objects once in an object graph.
public sealed class ObjectWalker : IEnumerable,
 IEnumerator {
   private Object m_current;

   // This stack contains the set of objects that will be enumerated.
   private Stack m_toWalk = new Stack();

   // The ObjectIDGenerator ensures that each object is enumerated just
 once.
   private ObjectIDGenerator m_idGen = new
 ObjectIDGenerator();

   // Construct an ObjectWalker passing the root of the object graph.
   public ObjectWalker(Object root) {
      Schedule(root);
   }

   // Return an enumerator so this class can be used with foreach.
   public IEnumerator GetEnumerator() {
      return this;
   }

   // Resetting the enumerator is not supported.
   public void Reset() {
      throw new NotSupportedException("Resetting the enumerator
 is not supported.");
   }

   // Return the enumeration's current object.
   public Object Current { get { return
 m_current; } }
   
   // Walk the reference of the passed-in object.
   private void Schedule(Object toSchedule)
 {
      if (toSchedule == null) return;

      // Ask the ObjectIDManager if this object has been examined before.
      Boolean firstOccurrence;
      m_idGen.GetId(toSchedule, out firstOccurrence);

      // If this object has been examined before, do not look at it
 again just return.
      if (!firstOccurrence) return;

      if (toSchedule.GetType().IsArray) {
         // The object is an array, schedule each element of the array
 to be looked at.
         foreach (Object item in ((Array)toSchedule))
 Schedule(item);
      } else {
         // The object is not an array, schedule this object to be looked
 at.
         m_toWalk.Push(toSchedule);
      }
   }

   // Advance to the next item in the enumeration.
   public Boolean MoveNext() {
      // If there are no more items to enumerate, return false.
      if (m_toWalk.Count == 0) return false;

      // Check if the object is a terminal object (has no fields that
 refer to other objects).
      if (!IsTerminalObject(m_current = m_toWalk.Pop())) {
         // The object does have field, schedule the object's instance
 fields to be enumerated.
         foreach (FieldInfo fi in m_current.GetType().GetFields(BindingFlags.Instance
 | BindingFlags.Public | BindingFlags.NonPublic)) {
            Schedule(fi.GetValue(m_current));
         }
      }
      return true;
   }

   // Returns true if the object has no data fields with information
 of interest.
   private Boolean IsTerminalObject(Object data) {
      Type t = data.GetType();
      return t.IsPrimitive || t.IsEnum || t.IsPointer || data
 is String;
   }
}


public sealed class App {
   // Define some fields in the class to test the ObjectWalker.
   public String name = "Fred";
   public Int32 Age = 40;

   static void Main() {
      // Build an object graph using an array that refers to various
 objects.
      Object[] data = new Object[] { "Jeff", 123, 555L,
 (Byte) 35, new App() };

      // Construct an ObjectWalker and pass it the root of the object
 graph.
      ObjectWalker ow = new ObjectWalker(data);

      // Enumerate all of the objects in the graph and count the number
 of objects.
      Int64 num = 0;
      foreach (Object o in ow) {
         // Display each object's type and value as a string.
         Console.WriteLine("Object #{0}: Type={1}, Value's string={2}",
 
            num++, o.GetType(), o.ToString());
      }
   }
}

// This code produces the following output.
//
// Object #0: Type=App, Value's string=App
// Object #1: Type=System.Int32, Value's string=40
// Object #2: Type=System.String, Value's string=Fred
// Object #3: Type=System.Byte, Value's string=35
// Object #4: Type=System.Int64, Value's string=555
// Object #5: Type=System.Int32, Value's string=123
// Object #6: Type=System.String, Value's string=Jeff
継承階層継承階層
System.Object
  System.Runtime.Serialization.ObjectManager
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
ObjectManager メンバ
System.Runtime.Serialization 名前空間

ObjectManager コンストラクタ

ObjectManager クラスの新しいインスタンスを初期化します。

名前空間: System.Runtime.Serialization
アセンブリ: mscorlib (mscorlib.dll 内)
構文構文

Public Sub New ( _
    selector As ISurrogateSelector, _
    context As StreamingContext _
)
Dim selector As ISurrogateSelector
Dim context As StreamingContext

Dim instance As New ObjectManager(selector,
 context)
public ObjectManager (
    ISurrogateSelector selector,
    StreamingContext context
)
public:
ObjectManager (
    ISurrogateSelector^ selector, 
    StreamingContext context
)
public ObjectManager (
    ISurrogateSelector selector, 
    StreamingContext context
)
public function ObjectManager (
    selector : ISurrogateSelector, 
    context : StreamingContext
)

パラメータ

selector

使用するサロゲート セレクタ。ISurrogateSelector は、指定された型のオブジェクトを逆シリアル化するときに使用する現在のサロゲートを決定します。逆シリアル化時に、サロゲート セレクタは、ストリームで送信された情報からオブジェクトの新しいインスタンスを作成します。

context

ストリーム コンテキスト。StreamingContext は ObjectManager によっては使用されませんが、ISerializable を実装している任意のオブジェクト、または ISerializationSurrogate を持っている任意のオブジェクトにパラメータとして渡されます。これらのオブジェクトは、逆シリアル化する情報の元のオブジェクトに応じて特定のアクションを実行できます。

例外例外
.NET Framework のセキュリティ.NET Framework のセキュリティ
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
ObjectManager クラス
ObjectManager メンバ
System.Runtime.Serialization 名前空間

ObjectManager メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド も参照)
  名前 説明
パブリック メソッド DoFixups 記録されたすべてのフィックスアップを実行します。
パブリック メソッド Equals  オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。)
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。)
パブリック メソッド GetObject 指定したオブジェクト ID のオブジェクトを返します。
パブリック メソッド GetType  現在のインスタンスの Type を取得します。 ( Object から継承されます。)
パブリック メソッド RaiseDeserializationEvent IDeserializationCallback を実装する任意の登録されたオブジェクトに逆シリアル化イベントを発生させます。
パブリック メソッド RaiseOnDeserializingEvent OnDeserializingAttribute でマークされたメソッドを呼び出します。
パブリック メソッド RecordArrayElementFixup オーバーロードされます。 後で実行するために、配列内の 1 つの要素に対するフィックスアップを記録します。
パブリック メソッド RecordDelayedFixup 後で実行するために、オブジェクト メンバに対するフィックスアップを記録します。
パブリック メソッド RecordFixup 後で実行するために、オブジェクトのメンバに対するフィックスアップを記録します。
パブリック メソッド ReferenceEquals  指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。)
パブリック メソッド RegisterObject オーバーロードされます。 オブジェクトが逆シリアル化されたときに、そのオブジェクトを登録します。
パブリック メソッド ToString  現在の Object を表す String を返します。 ( Object から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

ObjectManager クラス
System.Runtime.Serialization 名前空間

ObjectManager メンバ

逆シリアル化されたオブジェクトを追跡します。

ObjectManager データ型で公開されるメンバを以下の表に示します。


パブリック コンストラクタパブリック コンストラクタ
  名前 説明
パブリック メソッド ObjectManager ObjectManager クラスの新しいインスタンスを初期化します。
パブリック メソッドパブリック メソッド
( プロテクト メソッド も参照)
  名前 説明
パブリック メソッド DoFixups 記録されたすべてのフィックスアップを実行します。
パブリック メソッド Equals  オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。)
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。)
パブリック メソッド GetObject 指定したオブジェクト ID のオブジェクトを返します。
パブリック メソッド GetType  現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッド RaiseDeserializationEvent IDeserializationCallback を実装する任意の登録されたオブジェクトに逆シリアル化イベントを発生させます。
パブリック メソッド RaiseOnDeserializingEvent OnDeserializingAttribute でマークされたメソッドを呼び出します。
パブリック メソッド RecordArrayElementFixup オーバーロードされます。 後で実行するために、配列内の 1 つの要素に対するフィックスアップを記録します。
パブリック メソッド RecordDelayedFixup 後で実行するために、オブジェクト メンバに対するフィックスアップを記録します。
パブリック メソッド RecordFixup 後で実行するために、オブジェクトのメンバに対するフィックスアップを記録します。
パブリック メソッド ReferenceEquals  指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。)
パブリック メソッド RegisterObject オーバーロードされます。 オブジェクトが逆シリアル化されたときに、そのオブジェクトを登録します。
パブリック メソッド ToString  現在の Object を表す String を返します。 (Object から継承されます。)
プロテクト メソッドプロテクト メソッド
参照参照

関連項目

ObjectManager クラス
System.Runtime.Serialization 名前空間

Object Manager

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/09 07:26 UTC 版)

「Windows NT系」の記事における「Object Manager」の解説

サブシステムとシステムコールがWindowsのリソースへのアクセスを管理する。

※この「Object Manager」の解説は、「Windows NT系」の解説の一部です。
「Object Manager」を含む「Windows NT系」の記事については、「Windows NT系」の概要を参照ください。

ウィキペディア小見出し辞書の「ObjectManager」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ。


英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「ObjectManager」の関連用語

ObjectManagerのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



ObjectManagerのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、WikipediaのWindows NT系 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2026 GRAS Group, Inc.RSS