Да, вы можете!
Излишне говорить, что это плохой дизайн, но вы уже знаете это и не можете его изменить. Если нужно, вы можете попытаться частично издеваться над классом.
EDIT: Только что понял, что в моем примере используется Java не C#. Однако @Guillaume предлагает образец кода для C#. По-видимому, он даже встроен в API runtime!
В Java, С Mockito, это делает работу:
C c = Mockito.mock(C);
Mockito.doCallRealMethod().when(c).M();
// If M() isn't a void method
// when(c.M()).thenCallRealMethod();
c.M();
Однако, в этом случае M()
может не зависеть от какого-либо государства, заданный в конструкторе.
Для получения дополнительной информации о частичном издевательстве см. Это FAQ Question. Однако издевательство в основном используется для тестирования.
Этот вопрос является эквивалентом спрашивать «Я хочу назвать свою кошку, не имея кошку Как мне это сделать?» –
@programminghero +1 для lolz. Дайте ему преимущество в сомнении. Возможно, это класс сторонних разработчиков, что он действительно хочет функциональности 'C.M()', и он не контролирует его. :) –
Что-то для рассмотрения: если метод изменяет состояние экземпляра, это метод * stateful * и должен быть методом экземпляра. если метод ** не ** изменяет состояние экземпляра, это * безъядерный * метод и должен быть статическим методом. ergo, метод экземпляра является одной из двух вещей: либо 1) метод stateful, но и требует правильно созданного экземпляра, или 2) очень плохо написанный класс. –