Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Uyarı
Microsoft Foundation Sınıfları (MFC) kitaplığına destek verilmeye devam ediliyor. Ancak artık özellik eklemeyeceğiz veya belgeleri güncelleştirmeyeceğiz.
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:
Sınıfınızı CObject'ten (veya öğesinden türetilen bir sınıftan
CObject) türetmeSınıfınız için uygulama dosyasındaki IMPLEMENT_SERIAL makroyu kullanma.
Serialize ve >> işleçleri yerine << doğrudan çağırırsanız, 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 sınıf bildirimiyle gösterildiği gibi, CObject'dan (veya CObject'den türetilmiş bir sınıf olan CPerson'den) türetilmesi yoluyla, CObject'ün serileştirme protokolüne ve işlevselliğine eriş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
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.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
Serializesınıfı içinCPersonuygulamanın 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, nesneleriniz diskten yüklenip yeniden oluşturulduğunda bir varsayılan yapıcıya ihtiyaç duyar. 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.
Uyarı
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 sınıfınızın uygulama dosyasında (.CPP) kullanırsınız. Makroya verilen ilk iki bağımsız değişken sınıfın adı ve doğrudan 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 birden çok sürümü okuyabilmesini istiyorsanız (yani uygulamanın farklı sürümleriyle yazılmış dosyalar), IMPLEMENT_SERIAL makrosunun bağımsız değişkeni olarak VERSIONABLE_SCHEMA değerini kullanabilirsiniz. Sınıf GetObjectSchema'nın üye fonksiyonu CArchive için kullanım bilgileri ve bir örnek görmek için bakın.
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.