Есть ли способ получить ссылку на базовый класс в C#?

#c# #inheritance

Вопрос:

Я работаю над некоторым устаревшим кодом, который использует классы, методы и всевозможные шаблоны, которые не были разработаны для проверки. Я хотел бы создать модульные тесты для добавленных изменений, но я не хочу, чтобы функциональность базового класса вызывалась, если я предоставляю суррогат (методы базового класса обращаются к ресурсу базы данных).

То, что я хочу сделать, эффективно похоже на:

 public override void DoSomething()
{
        // Perform some custom logic before calling the base implementation
        // ...
        // ...

        // The keyword base is not valid in this context
        (BaseClassSurrogate ?? base).DoSomething();

        // Some more custom logic
        // ...
        // ...
}
 

Возможно ли что-то подобное в C#, или есть альтернативный способ тестирования, который не требует сложного рефакторинга?

Ответ №1:

Вы не можете достичь этого таким образом, потому base.Xyz() что и BaseClassSurrogate.Xyz() в конечном итоге использовали бы другой ИЛ.

Вы можете достичь этого, как:

 if (BaseClassSurrogate is null)
{
    base.DoSomething();
}
else
{
    BaseClassSurrogate.DoSomething();
}
 

Это действительно некрасиво, но я бы ожидал, что это сработает.