Если дополнительный метод имеет ту же подпись как метод в запечатанном классе, каков приоритет вызова?

Я читал о дополнительных методах в C# 3.0. Текст, который я читаю, подразумевает, что дополнительный метод с той же подписью как метод в расширяемом классе был бы вторым в порядке выполнения - то есть, метод в запечатанном классе называют. Если это верно, как можно расширить запечатанный класс?

14
задан BoltClock 28 March 2012 в 18:39
поделиться

2 ответа

Действительно, метод фактический имеет приоритет над методом расширения. И чтобы прояснить - «порядок выполнения» предполагает, что оба могут быть вызваны; Только будет вызываться исходный метод. Возможно, выберете другое имя / подпись; вы не можете использовать методы расширения для monkey-patch, если это ваше намерение.

Если есть какой-то базовый класс / интерфейс (который реализует тип), у которого нет этого метода, вы, возможно, могли бы привести его туда ...?

{{1} }
13
ответ дан 1 December 2019 в 13:21
поделиться

Используйте другую сигнатуру метода. Методы расширения подразумевают, что вы расширяете запечатанный класс новыми функциями, а не переопределяете уже реализованные.

Методы расширения имеют семантику "скрытия по имени" для членов экземпляра типа. Это означает, что любой доступный член экземпляра типа всегда будет затенять все методы расширения с тем же именем, даже если метод расширения подходит лучше. В результате, если к типу будет добавлен член экземпляра с тем же именем, что и метод расширения, то метод расширения может стать невызываемым.

Для получения более подробной информации посмотрите эту статью: Лучшие методы расширения (методы расширения, часть 6)

6
ответ дан 1 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: