Use explicit for constructors Use override instead virtual for inherited methods Mark final derived classes as "final"
Additionally, make it slightly clearer who created which previously existing packets.