Я читал о дополнительных методах в C# 3.0. Текст, который я читаю, подразумевает, что дополнительный метод с той же подписью как метод в расширяемом классе был бы вторым в порядке выполнения - то есть, метод в запечатанном классе называют. Если это верно, как можно расширить запечатанный класс?
Действительно, метод фактический имеет приоритет над методом расширения. И чтобы прояснить - «порядок выполнения» предполагает, что оба могут быть вызваны; Только будет вызываться исходный метод. Возможно, выберете другое имя / подпись; вы не можете использовать методы расширения для monkey-patch, если это ваше намерение.
Если есть какой-то базовый класс / интерфейс (который реализует тип), у которого нет этого метода, вы, возможно, могли бы привести его туда ...?
{{1} }Используйте другую сигнатуру метода. Методы расширения подразумевают, что вы расширяете запечатанный класс новыми функциями, а не переопределяете уже реализованные.
Методы расширения имеют семантику "скрытия по имени" для членов экземпляра типа. Это означает, что любой доступный член экземпляра типа всегда будет затенять все методы расширения с тем же именем, даже если метод расширения подходит лучше. В результате, если к типу будет добавлен член экземпляра с тем же именем, что и метод расширения, то метод расширения может стать невызываемым.
Для получения более подробной информации посмотрите эту статью: Лучшие методы расширения (методы расширения, часть 6)