using System; public class Test { private static DeviredExample _devired; public static void Main() { _devired = new DeviredExample(); _devired.CallMethod += (sender, message) => { Console.WriteLine(message); }; _devired.SayHello(); } } public class Example { public void SayHello() => Console.WriteLine("Hello"); } public class DeviredExample : Example { public delegate void MethodCall(object sender, string message); public event MethodCall CallMethod; protected virtual void OnCallMethod(string message, Action callback) { callback?.Invoke(); CallMethod?.Invoke(this, message); } public new void SayHello() { OnCallMethod("Say hello called", () => base.SayHello()); } }