Задачка. В обычном Dictionary<> не устраивает реализация метода Add. Надо кое-что в него добавить (некую диагностику). В остальном стандартный Dictionary<> вполне устраивает.
Унаследоваться и переопределить метод Add не выходит. Метод не виртуальный. Видится два выхода:
Выход 1. Написать свой новый внешний статический метод (например AddValue) и заменить все вызовы старого Add на новый AddValue (можно сделать как extention метод для красоты).
Выход 2. Написать свой Dictionary агрегировав стандартный и тупо перенаправив ему все вызовы, подкрутив немного метод Add.
Выход 1 не устраивает тем, что надо поправить очень большое число мест использования привычного метода Add на нестандартный.
Выход 2 Хорош тем, что требует исправления клиентского кода только в месте создания словаря, а код в местах его использования не меняется. Но плох тем, что надо написать кучу тупого кода, повторяя вполне устраивающую функциональность стандартного словаря.
Нет ли ещё какого способа "переопределить" невиртуальный метод?