Я все еще подозреваю ключевое слово new
для этой ошибки.
Вы говорите: «Я не думаю, что новое ключевое слово является проблемой, потому что 1) удаление его не останавливает ошибку», но вы должны иметь в виду, что если ваш метод скрывает базовый метод, компилятор добавит new
, даже если вы не укажете это, если вы не указали для простоты override
.
Все, что явно делает new
, это предотвращение предупреждения компилятора (не ошибка).
Есть ли способ скрыть или переопределить вообще?
Что произойдет, если вы укажете virtual
вместо new
в этом методе. Это компилируется? Ошибка с «не найден подходящий метод для переопределения?»
[ Редактировать в ответ на ваш комментарий]
Я получаю эту ошибку:
« 'Utils.Connection.BugFactory ()':
не может переопределить, потому что
'ThirdPartyLibrary.ConnectionClass.BugFactory'
это не функция. "Оригинал
ThirdPartyLibrary.ConnectionClass.BugFactory
это собственность.
Я подозреваю, что это может быть проблемой. Вы переопределяете свойство методом.
Используя ключевое слово new, вы скрываете старое свойство любому, у кого есть ссылка на ваш производный класс.
В отличие от этого, любой, у кого есть ссылка на суперкласс (тот, от которого вы наследуете), увидит старое свойство, а не ваш новый метод.
Можете ли вы дать еще немного кода суперкласса (или интерфейса) вместе с производным классом?
[ Редактировать в ответ на ваш комментарий]
Я пытаюсь изменить интерфейс на
вместо этого BugFactory будет свойством
метода
Проблема с новым заключается в том, что это похоже на магию, которая позволяет вам изменять типы аргументов и возвращаемые типы, но это действительно чистое зло.
Вместо того, чтобы изменять типы для всех потребителей кода, он делает это только для тех потребителей, которые представлены в качестве переопределенного нового типа. Это приводит вас в ужасное положение, когда два потребителя в одном экземпляре будут видеть разные подписи в зависимости от того, как они разыгрываются.
Посмотрите, сможете ли вы определить потребляющий код, который жалуется, и подумайте, нужно ли вносить изменения в ваш код для поддержки изменений типа. Кроме того, существует ли вероятность того, что вы пытаетесь сделать что-то, что "немного неприятно"?