Удаление подклассов - PullRequest
1 голос
/ 30 мая 2020

Как часть сборки библиотеки, у меня есть абстрактный класс SignalGenerator, который реализует IDisposable и имеет несколько подклассов. В этом абстрактном классе я поддерживаю экземпляры stati c каждого одноэлементного подкласса:

    private static volatile Lazy<SignalGenerator> s_signalGenerator; // Default object instance if subclass not specified.
    private static volatile Lazy<SignalGenerator> s_signalGeneratorSimulated;
    private static volatile Lazy<SignalGenerator> s_signalGenerator79C3;
    private static volatile Lazy<SignalGenerator> s_signalGenerator75C3;
    private static volatile Lazy<SignalGenerator> s_signalGenerator41620;

У меня есть отдельная сборка, которая ссылается на этот класс и создает экземпляры подкласса, вызывая метод stati c SignalGenerator.GetInstance(className) который создает экземпляр одной из указанных выше переменных класса на основе параметра className.

Теперь проблема состоит в том, чтобы выяснить, какой подкласс следует удалить при вызове метода абстрактного класса Dispose():

   using SignalGenerator s = SignalGenerator.GetInstance(nameof(P41620)); // P41620 is a subclass of SignalGenerator and corresponds to s_signalGenerator41620.
   s.Dispose(); // How to tell abstract class which subclass to dispose of when Dispose doesn’t accept parameters?

Я думал, что понял это, добавив следующий метод к абстрактному классу и переопределив его в подклассах:

protected virtual void Dispose(bool disposing, [CallerFilePath] string subclassName = "")

Где CallerFilePath можно было бы проанализировать, чтобы найти вызывающий имя подкласса. Но это работает, только если подкласс переопределяет этот метод Dispose, а не все.

Я понимаю, что все это имеет немного запаха кода, поэтому ищу лучшие решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...