| 123456789101112131415161718192021222324252627282930313233343536373839 | using System;namespace InABox.DigitalMatter{    public abstract class DMField : DMObject    {        private int _payloadaddress;        public abstract byte Type { get; }        public ushort Length { get; set; }        protected override void BeforeEncode()        {            base.BeforeEncode();            _payloadaddress = AddByte(Type);        }        protected override void AfterEncode()        {            base.AfterEncode();            Length = BufferSize;            InsertUInt16(_payloadaddress, Length);        }        protected override void BeforeDecode()        {            base.BeforeDecode();            int type = TakeByte();            Length = PeekByte(0) == 255 ? TakeUInt16() : TakeByte();        }        public abstract bool IsValid();        public virtual string Dump()        {            return BitConverter.ToString(new[] { Type });        }    }}
 |