Consider the code:
class ChildClass : BaseClass {
public void Method1() {} //some other method
}
abstract class
As all methods inside interfaces are virtual by default the DoWork is virtual inside every each of these definitions/implementations you provided except the ChildClass. When you explicitly use DoWork of IChildInterface it uses BaseClass.DoWork implicitly which then uses ((IChildInterface)this).DoWork();
explicitly again. And so on. You have this loop that is never ending, hence you're getting the StackOverflow.