Stejně jako minule uděláme si ukázkové dvě třídy, kdy bude jedna odvozena od druhé.
public class A{ public A(){ } public A(GenericReader reader){ int version=reader.ReadInt(); //nacitani hodnot } public virtual void Serialize(GenericWriter writer){ writer.Write(0);//verze //zapis ostatnich hodnot } } public class B:A{ public B(){ } public B(GenericReader reader):base(reader){ int version=reader.ReadInt(); //nacitani hodnot } public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write(0);//verze //zapis ostatnich hodnot } }
Následující příklad jasně ukazuje co je potřeba provést. Při ukládání metodou Serialize, je nutné pokaždé zavolat metodu od předka. Dále je také důležité aby metoda přepisovala metodu původní, to ale jak jistě milý čtenář ví provedeme klíčovými slovy virtual a override. Načítání hodnot v konstruktorech je běžné. Pouze opět zavoláme konstruktor předka pomocí base. Důležité je vědět, že se nejprve zavolá konstruktor předka a teprve potom konstruktor současný. Proto se nejprve při zápisu volá metoda od předka. Pořadí hraje v binární serializaci důležitou roli!!
Tak a zítra se podíváme konečně na obslužný kod, který napsané metody využije a zavolá.
In today's article I will write about serialization of derived classes. I simply forgot write about them yesterday.
This is our example, let's have two classes A and B:
public class A{ public A(){ } public A(GenericReader reader){ int version=reader.ReadInt(); //reading values } public virtual void Serialize(GenericWriter writer){ writer.Write(0);//version //writing values } } public class B:A{ public B(){ } public B(GenericReader reader):base(reader){ int version=reader.ReadInt(); //reading values } public override void Serialize(GenericWriter writer){ base.Serialize(writer); writer.Write(0);//version //writing values } }
For saving values in Serialize method is important have this method virtual. This is done by keyword virtual and override as usual. Derived class MUST call method from base class and after that write all values. This must be done because of constructors. Constructors are invoked from the most base class (in C# object class) to top most. In binary serialization is order very important.
See you tomorrow.
Žádné komentáře:
Okomentovat