Aracılığıyla paylaş


Seri hale getirme: Seri Hale Getirilebilir Bir Sınıf Yapma

Bir sınıfı seri hale getirmek için beş ana adım gereklidir. Bunlar aşağıda listelenmiştir ve aşağıdaki bölümlerde açıklanmıştır:

  1. Sınıfınızı CObject'ten (veya öğesinden türetilen bir sınıftan CObject) türetme

  2. Üye serileştirme işlevini geçersiz kılma.

  3. Sınıf bildiriminde DECLARE_SERIAL makroyu kullanma.

  4. Bağımsız değişken içermeyen bir oluşturucu tanımlama.

  5. Sınıfınız için uygulama dosyasındaki IMPLEMENT_SERIAL makroyu kullanma.

CArchive ve << işleçleri yerine >> doğrudan çağırırsanızSerialize, serileştirme için son üç adım gerekli değildir.

Sınıfınızı CObject'ten Türetme

Temel serileştirme protokolü ve işlevselliği sınıfında CObject tanımlanır. sınıfınızın aşağıdaki bildiriminde gösterildiği gibi sınıfından CObject (veya öğesinden CObjecttüretilmiş bir sınıftan CPerson) türeterek, serileştirme protokolüne ve işlevselliğine CObjecterişim elde edebilirsiniz.

Üye İşlevini SeriLeştirmeyi Geçersiz Kılma

Serialize sınıfında tanımlanan üye işlevi, bir nesnenin CObject geçerli durumunu yakalamak için gereken verileri gerçekten seri hale getirmekle sorumludur. İşlev, Serialize nesne verilerini okumak ve yazmak için kullandığı bir CArchive bağımsız değişkene sahiptir. CArchive nesnesinin depolama IsStoring(veri yazma) veya yükleme (veri okuma) durumunu Serialize belirten bir üye işlevi vardır. sonuçlarını IsStoring kılavuz olarak kullanarak, ekleme işleci () ile nesnenizin verilerini nesneye CArchive eklersiniz veya ayıklama işleci (<<>>) ile verileri ayıklarsınız.

türünden türetilmiş CObject ve iki yeni üye değişkenine CString ve WORD'e sahip bir sınıf düşünün. Aşağıdaki sınıf bildirimi parçası, yeni üye değişkenlerini ve geçersiz kılınan Serialize üye işlevinin bildirimini gösterir:

class CPerson : public CObject
{
public:
   DECLARE_SERIAL(CPerson)
   // empty constructor is necessary
   CPerson();
   virtual ~CPerson();

   CString m_name;
   WORD   m_number;

   void Serialize(CArchive& archive);
};

Üye serileştirme işlevini geçersiz kılmak için

  1. Nesnenin devralınan bölümünün seri hale getirildiğinden emin olmak için temel sınıf sürümünüzü Serialize çağırın.

  2. Sınıfınıza özgü üye değişkenlerini ekleyin veya ayıklayın.

    Ekleme ve ayıklama işleçleri, verileri okumak ve yazmak için arşiv sınıfıyla etkileşim kurar. Aşağıdaki örnek, yukarıda bildirilen sınıf için CPerson uygulamanın Serialize nasıl yapılacağını gösterir:

    void CPerson::Serialize(CArchive& archive)
    {
       // call base class function first
       // base class is CObject in this case
       CObject::Serialize(archive);
    
       // now do the stuff for our specific class
       if (archive.IsStoring())
          archive << m_name << m_number;
       else
          archive >> m_name >> m_number;
    }
    

Ayrıca, büyük miktarlarda yazılmamış verileri okumak ve yazmak için CArchive::Read ve CArchive::Write üye işlevlerini de kullanabilirsiniz.

DECLARE_SERIAL Makroyu Kullanma

DECLARE_SERIAL makro, burada gösterildiği gibi serileştirmeyi destekleyecek sınıfların bildiriminde gereklidir:

class CPerson : public CObject
{
public:
   DECLARE_SERIAL(CPerson)

Bağımsız Değişken Olmadan Oluşturucu Tanımlama

MFC, seri durumdan çıkarıldığı (diskten yüklenen) nesnelerinizi yeniden oluşturduğunda varsayılan bir oluşturucu gerektirir. Seri durumdan çıkarma işlemi, tüm üye değişkenlerini nesneyi yeniden oluşturmak için gereken değerlerle doldurur.

Bu oluşturucu genel, korumalı veya özel olarak bildirilebilir. Korumalı veya özel olmasını sağlarsanız, yalnızca serileştirme işlevleri tarafından kullanılacağından emin olmanıza yardımcı olursunuz. Oluşturucu, nesneyi gerekirse silinmesine izin veren bir duruma getirmelidir.

Dekont

DECLARE_SERIAL ve IMPLEMENT_SERIAL makroları kullanan bir sınıfta bağımsız değişken içermeyen bir oluşturucu tanımlamayı unutursanız, IMPLEMENT_SERIAL makronun kullanıldığı satırda "varsayılan oluşturucu yok" derleyici uyarısı alırsınız.

Uygulama Dosyasında IMPLEMENT_SERIAL Makroyu Kullanma

IMPLEMENT_SERIAL makro, 'den CObjectserileştirilebilir bir sınıf türetdiğinizde gereken çeşitli işlevleri tanımlamak için kullanılır. Bu makroyu uygulama dosyasında (. CPP) öğesini seçin. Makronun ilk iki bağımsız değişkeni sınıfın adı ve hemen temel sınıfının adıdır.

Bu makronun üçüncü bağımsız değişkeni bir şema numarasıdır. Şema numarası temelde sınıfın nesneleri için bir sürüm numarasıdır. Şema numarası için 0'dan büyük veya buna eşit bir tamsayı kullanın. (Bu şema numarasını veritabanı terminolojisiyle karıştırmayın.)

MFC serileştirme kodu, nesneleri belleğe okurken şema numarasını denetler. Diskteki nesnenin şema numarası bellekteki sınıfın şema numarasıyla eşleşmiyorsa, kitaplık bir CArchiveExceptionoluşturur ve programınızın nesnenin yanlış bir sürümünü okumasını engeller.

Üye işlevinizin Serialize uygulamanın farklı sürümleriyle yazılmış birden çok sürümü okuyabilmesini istiyorsanız, IMPLEMENT_SERIAL makrosunun bağımsız değişkeni olarak VERSIONABLE_SCHEMA değerini kullanabilirsiniz. Kullanım bilgileri ve bir örnek için sınıfının üye işlevine CArchivebakınGetObjectSchema.

Aşağıdaki örnekte, CPersonöğesinden CObjecttüretilen bir sınıf için IMPLEMENT_SERIAL nasıl kullanılacağı gösterilmektedir:

IMPLEMENT_SERIAL(CPerson, CObject, 1)

Seri hale getirilebilir bir sınıfınız olduğunda, Serileştirme: Bir Nesneyi Seri Hale Getirme makalesinde açıklandığı gibi sınıfın nesnelerini seri hale getirebilirsiniz.

Ayrıca bkz.

Serileştirme