Подтвердить что ты не робот

Запечатанное ключевое слово в сочетании с переопределением

Всегда необходимо следовать ключевому слову sealed с помощью override в сигнатуре метода, например, ниже:

public sealed override string Method1(){.....}

Я имею в виду, если я хочу "запечатать" метод в базовом классе без переопределения, нужно ли еще ключевое слово override?

4b9b3361

Ответ 1

Уплотнение метода имеет смысл только в том случае, если вы его переопределите.

Здесь происходит следующее:
Вы переопределяете метод из базового класса (override) и сообщаете компилятору, что классы, полученные из вашего класса, больше не могут переопределять этот метод (seal).

Если этот метод является новым, объявленным вами в вашем классе, и вы хотите, чтобы производные классы не переопределяли его, просто не объявляйте его виртуальным.

Если метод объявлен в базовом классе, но не является надёжным уплотнением, это не имеет никакого смысла, потому что его уже нельзя переопределить.

Ответ 2

Вы можете только опечатать переопределение, поэтому я думаю, что ответ да.

Ответ 3

Я думаю, что г-н Хильгарт предоставил лучший ответ здесь , но просто чтобы добавить что-то новое для программистов, у которых есть предыдущий фон в Java (например, я), я думаю, что большинство программистов, новых для С#, склонны путать sealed с final в Java в отношении переопределения.

В Java поведение по умолчанию без указания модификатора "any" заключается в том, что метод может be overrideen в его производных классах.

В С# поведение по умолчанию заключается в том, что метод не может быть overriden, если явно не указано использование virtual.

Надеюсь, что это поможет дополнить лучший ответ выше.