Информация об изменениях

Сообщение Переопределение невиртуального метода от 19.04.2017 13:32

Изменено 19.04.2017 13:40 Pek2014

Переопределение невиртуального метода
Хочется странного?...

Задачка. В обычном Dictionary<> не устраивает реализация метода Add. Надо кое-что в него добавить (некую диагностику). В остальном стандартный Dictionary<> вполне устрает.

Унаследоваться и переопределить метод Add не выходит. Метод не виртуальный. Видится два выхода:

Выход 1. Написать свой новый внешний статический метод (например AddValue) и заменить все вызовы старого Add на новый AddValue (можно сделать как extention метод для красоты).

Выход 2. Написать свой Dictionary агрегировав стандартный и тупо перенаправив ему все вызовы, подкрутив немного метод Add.


Выход 1 не устраивает тем, что надо поправить очень большое число мест использования привычного метода Add на нестандартный.

Выход 2 Хорош тем, что требует исправления клиентского кода только в месте создания словаря, а код в местах его использования не меняется. Но плох тем, что надо написать кучу тупого кода, повторяя вполне устраивающую функциональность стандартного словаря.

Нет ли ещё какого способа "переопределить" невиртуальный метод?
Переопределение невиртуального метода
Хочется странного?...

Задачка. В обычном Dictionary<> не устраивает реализация метода Add. Надо кое-что в него добавить (некую диагностику). В остальном стандартный Dictionary<> вполне устраивает.

Унаследоваться и переопределить метод Add не выходит. Метод не виртуальный. Видится два выхода:

Выход 1. Написать свой новый внешний статический метод (например AddValue) и заменить все вызовы старого Add на новый AddValue (можно сделать как extention метод для красоты).

Выход 2. Написать свой Dictionary агрегировав стандартный и тупо перенаправив ему все вызовы, подкрутив немного метод Add.


Выход 1 не устраивает тем, что надо поправить очень большое число мест использования привычного метода Add на нестандартный.

Выход 2 Хорош тем, что требует исправления клиентского кода только в месте создания словаря, а код в местах его использования не меняется. Но плох тем, что надо написать кучу тупого кода, повторяя вполне устраивающую функциональность стандартного словаря.

Нет ли ещё какого способа "переопределить" невиртуальный метод?