struct [ : ] // struct definition (allocated in place (auto storage), can be allocated contiguously) | class [ : | struct] // class definition (always on the heap, class:struct do not have: _class, _refCount, _vTbl { [ = ;] // Default value [public|private|static :] // Access Storage (public: everywhere module is visible / private: library only / static: this .ec file only ) [ ; ] // Data member [ { [ }; ] // Member instance [ property [] // Property definition; If name is omitted it is a conversion property to(get)/from(set) that type { [set { }] [get { }] [isset { }] } ] // Method definition [ [|thisclass|(empty: no this object) ::]() { } ] [ ClassName() { } ] // Constructor [ ~ClassName() { } ] // Destructor }[;] // Semicolon is optional with a class, but NOT with a struct // Object (named) instantiation syntax (a declaration) { [ [ = ] ] [, ...] [; [ [|thisclass|(empty: no this object) ::]() // Instance level virtual method overirde { } ] }; // Anonymous instantiation (an expression) -- type is can be optional (implied) if the destination type is a class [] { }