public class Container<T, TChild>
where TChild : Container<T, TChild>
OnItemChanged?.Invoke((TChild)this);
public Action<TChild> OnItemChanged { get; set; }
public class IntContainer : Container<int, IntContainer>
Console.WriteLine($"The new item value is {42 - Item} away from 42.");
public static void Main()
var c = new IntContainer { Item = 39, OnItemChanged = HandleItemChanged };
private static void HandleItemChanged(IntContainer c)