var instance = new Implementation();
var extInstance = new ExtImplementation();
((DocumentNode)extInstance).ExecuteTransaction();
void Execute(DocumentNode docNode) => docNode.ExecuteTransaction();
public interface ITransactions
void ExecuteTransaction();
public class DocumentNode : ITransactions
public void ExecuteTransaction() => Console.WriteLine("Base ExecuteTransaction");
public ITransactions Transactions => (ITransactions) this;
public class ExtDocumentNode : DocumentNode, ITransactions
public new void ExecuteTransaction()
Console.Write("Overriden:");
((DocumentNode)this).Transactions.ExecuteTransaction();
public new ITransactions Transactions => (ITransactions) this;
public class Implementation : DocumentNode
public void Foo() => this.Transactions.ExecuteTransaction();
public class ExtImplementation : ExtDocumentNode
public void Foo() => this.Transactions.ExecuteTransaction();