I would like to understand why this code runs into a Stack Overflow
using System;
public class Program
{
public static void Main()
{
var docNode = new DocumentNode();
docNode.Transactions.ExecuteInvisibleTransaction();
var docNodeExt = new DocumentNodeExt();
docNodeExt.Transactions.ExecuteInvisibleTransaction();
}
}
public class DocumentNode : ITransactions
{
void ITransactions.ExecuteInvisibleTransaction() => Console.WriteLine("ExecuteInvisibleTransaction in DocumentNode");
public ITransactions Transactions => this;
}
public class DocumentNodeExt : DocumentNode, ITransactions
{
public void ExecuteInvisibleTransaction() => base.Transactions.ExecuteInvisibleTransaction();
}
public interface ITransactions
{
void ExecuteInvisibleTransaction();
}
Demo: https://dotnetfiddle.net/k4mJ5Y
But when I drop the interface ITransactions
from the class DocumentNodeExt
the Stack Overflow
doesn't occure?
using System;
public class Program
{
public static void Main()
{
var docNode = new DocumentNode();
docNode.Transactions.ExecuteInvisibleTransaction();
var docNodeExt = new DocumentNodeExt();
docNodeExt.Transactions.ExecuteInvisibleTransaction();
}
}
public class DocumentNode : ITransactions
{
void ITransactions.ExecuteInvisibleTransaction() => Console.WriteLine("ExecuteInvisibleTransaction in DocumentNode");
public ITransactions Transactions => this;
}
public class DocumentNodeExt : DocumentNode
{
public void ExecuteInvisibleTransaction() => base.Transactions.ExecuteInvisibleTransaction();
}
public interface ITransactions
{
void ExecuteInvisibleTransaction();
}