public static void Main()
var docNode = new DocumentNode();
Console.WriteLine("Use DocumentNode");
docNode.Transactions.ExecuteInvisibleTransaction();
var docNodeExt = new DocumentNodeExt();
Console.WriteLine("Use DocumentNodeExt");
docNodeExt.Transactions.ExecuteInvisibleTransaction();
Console.WriteLine("Cast DocumentNodeExt to DocumentNode");
((DocumentNode)docNodeExt).Transactions.ExecuteInvisibleTransaction();
public class DocumentNode : ITransactions
void ITransactions.ExecuteInvisibleTransaction() => Console.WriteLine("ExecuteInvisibleTransaction in DocumentNode");
public ITransactions Transactions => this;
public class DocumentNodeExt : DocumentNode
public new ITransactions Transactions { get; }
Transactions = new TransactionsWrapper(this);
public class TransactionsWrapper : ITransactions
private readonly ITransactions _transactions;
public TransactionsWrapper(ITransactions transactions)
_transactions = transactions;
public void ExecuteInvisibleTransaction()
Console.WriteLine("ExecuteInvisibleTransaction in TransactionsWrapper");
_transactions.ExecuteInvisibleTransaction();
public interface ITransactions
void ExecuteInvisibleTransaction();