c# inheritance with virtual and override