В коде используется неверный образец приложения языкового шаблона. Я ясно вижу C ++ backgroung для автора кода C #. К сожалению, методы кодирования C ++ не применимы на языке C #.
Лучше не допускать попадания объекта в сборщик мусора (GC), просто ссылаясь на него где-то еще, как в шаблоне Singleton, вместо того, чтобы пытаться воскресить удаленный объект, или использовать шаблон Dispose на языке, не обеспечивающем полный контроль над сборщик мусора и управление памятью, как и должно быть, например, в C ++.
Проще говоря, вы не должны использовать идиомы C ++ в C #, но советы и хитрости:
Интерфейсы вместо чисто виртуальных функций в C ++,
Наследование интерфейса вместо наследования нескольких классов в C ++,
Нет управления памятью (используйте слабые ссылки) вместо полного времени жизни контролируемого объекта в C ++