Making member virtual prevents calling default interface implementation and causes StackOverflowException in C# 8
问题 Consider the code: class ChildClass : BaseClass { public void Method1() {} //some other method } abstract class BaseClass : IChildInterface { public virtual //<- If we add virtual so that this method can be overridden by ChildClass, we get StackOverflowException and DoWork() implementation in IChildInterface is never called. void DoWork() { //base class specific implmentation ((IChildInterface)this).DoWork(); //call into default implementation provided by IChildInterface } } interface