https://witscad.com/course/csharp-intermediate/chapter/overriding-and-abstract-classes#abstract_classes