Share via


ObjectManager Sınıf

Tanım

Dikkat

Formatter-based serialization is obsolete and should not be used.

Seri durumdan çıkarıldığı için nesneleri izler.

public ref class ObjectManager
public class ObjectManager
[System.Obsolete("Formatter-based serialization is obsolete and should not be used.", DiagnosticId="SYSLIB0050", UrlFormat="https://aka.ms/dotnet-warnings/{0}")]
public class ObjectManager
[System.Runtime.InteropServices.ComVisible(true)]
public class ObjectManager
type ObjectManager = class
[<System.Obsolete("Formatter-based serialization is obsolete and should not be used.", DiagnosticId="SYSLIB0050", UrlFormat="https://aka.ms/dotnet-warnings/{0}")>]
type ObjectManager = class
[<System.Runtime.InteropServices.ComVisible(true)>]
type ObjectManager = class
Public Class ObjectManager
Devralma
ObjectManager
Öznitelikler

Örnekler

Aşağıdaki kod örneği, bir nesne grafiğinde ObjectManager izlenerek her nesneye yalnızca bir kez geçiş yapmak için sınıfının nasıl kullanılacağını gösterir.

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

Açıklamalar

Seri durumdan çıkarma sırasında, Formatter serileştirilmiş akıştaki bir nesneye başvurunun, seri durumdan çıkarılmış bir nesneye mi (geriye dönük başvuru) yoksa henüz seri durumdan çıkarılmamış bir nesneye mi (ileri başvuru) başvurduğunu belirlemek için sorgular ObjectManager . Serileştirilmiş akıştaki başvuru bir ileriye doğru başvuruysa, Formatter ile bir düzeltme ObjectManagerkaydedebilir. Serileştirilmiş akıştaki başvuru geriye dönük bir başvuruysa, Formatter başvuru hemen tamamlanır. Düzeltme, nesne seri durumdan çıkarma işlemi sırasında henüz tamamlanmamış nesne başvurularını sonlandırma işlemini ifade eder. Gerekli nesne seri durumdan çıkarıldıktan sonra başvurusu ObjectManager tamamlanır.

, ObjectManager düzeltme sırasını dikte eden bir dizi kuralı izler. uygulayan ISerializable veya içeren ISerializationSurrogate tüm nesneler, nesne ağacı seri durumdan çıkarıldığında aracılığıyla SerializationInfo ilettiği tüm nesnelerin kullanılabilir olmasını bekleyebilirsiniz. Ancak, bir üst nesne, tüm alt nesnelerinin tamamen seri durumdan çıkarıldığında tamamen tamamlanacağını varsayamaz. Tüm alt nesneler mevcut olur, ancak tüm torun nesneleri mutlaka mevcut olmaz. Bir nesnenin alt nesneleri üzerinde kod yürütmeye bağlı belirli eylemleri gerçekleştirmesi gerekiyorsa, bu eylemleri geciktirebilir, arabirimi uygulayabilir IDeserializationCallback ve kodu yalnızca bu arabirimde geri çağrıldığında yürütebilir.

Oluşturucular

ObjectManager(ISurrogateSelector, StreamingContext)
Geçersiz.

ObjectManager sınıfının yeni bir örneğini başlatır.

Yöntemler

DoFixups()
Geçersiz.

Kaydedilen tüm düzeltmeleri gerçekleştirir.

Equals(Object)
Geçersiz.

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetHashCode()
Geçersiz.

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetObject(Int64)
Geçersiz.

Belirtilen nesne kimliğine sahip nesneyi döndürür.

GetType()
Geçersiz.

Type Geçerli örneğini alır.

(Devralındığı yer: Object)
MemberwiseClone()
Geçersiz.

Geçerli Objectöğesinin sığ bir kopyasını oluşturur.

(Devralındığı yer: Object)
RaiseDeserializationEvent()
Geçersiz.

seri durumdan çıkarma olayını uygulayan herhangi bir kayıtlı nesneye yükseltir IDeserializationCallback.

RaiseOnDeserializingEvent(Object)
Geçersiz.

ile OnDeserializingAttributeişaretlenmiş yöntemini çağırır.

RecordArrayElementFixup(Int64, Int32, Int64)
Geçersiz.

Dizideki bir öğe için düzeltme kaydeder.

RecordArrayElementFixup(Int64, Int32[], Int64)
Geçersiz.

Bir dizideki belirtilen öğelerin düzeltmelerini daha sonra yürütülecek şekilde kaydeder.

RecordDelayedFixup(Int64, String, Int64)
Geçersiz.

Nesne üyesinin daha sonra yürütülecek düzeltmesini kaydeder.

RecordFixup(Int64, MemberInfo, Int64)
Geçersiz.

Bir nesnenin üyesi için daha sonra yürütülecek düzeltmeyi kaydeder.

RegisterObject(Object, Int64)
Geçersiz.

Bir nesneyi seri durumdan çıkarıldığı için kaydeder ve ile objectIDilişkilendirilir.

RegisterObject(Object, Int64, SerializationInfo)
Geçersiz.

Bir nesneyi seri durumdan çıkarıldığı için kaydeder, ile objectIDilişkilendirerek ve ile kullanılanı SerializationInfo kaydeder.

RegisterObject(Object, Int64, SerializationInfo, Int64, MemberInfo)
Geçersiz.

Bir nesnenin bir üyesini seri durumdan çıkarıldığı için kaydeder, ile objectIDilişkilendirip öğesini kaydeder SerializationInfo.

RegisterObject(Object, Int64, SerializationInfo, Int64, MemberInfo, Int32[])
Geçersiz.

Seri durumdan çıkarılırken bir nesnede bulunan dizinin bir üyesini kaydeder, ile objectIDilişkilendirir ve öğesini kaydeder SerializationInfo.

ToString()
Geçersiz.

Geçerli nesneyi temsil eden dizeyi döndürür.

(Devralındığı yer: Object)

Şunlara uygulanır