Есть ли функциональная разница между ключевым словом c # sealed и ключевым словом Java final?

Возможный дубликат:
Что эквивалент Java final в C #?

В Java final применяется не только к классу.

Итак, мне интересно: есть ли функциональная разница между двумя ключевыми словами?

Спасибо, и извините за относительно нубский вопрос.

Быстрый поиск в Google не удовлетворил мои потребности.


person Hamish Grubijan    schedule 15.01.2010    source источник
comment
dup: stackoverflow.com/questions/1327544/   -  person Rubens Farias    schedule 15.01.2010
comment
почему бы вам просто не сравнить документацию?   -  person Ed S.    schedule 15.01.2010
comment
RTFM, ага. Что ж, давайте мирно закроем этот Q. Спасибо вам всем! Я должен был выбрать один ответ как принятый.   -  person Hamish Grubijan    schedule 15.01.2010


Ответы (2)


Ключевое слово final в Java эквивалентно ключевым словам C # sealed, readonly и sealed.

Два из этих трех несколько отличаются в Java и C #:

В Java методы по умолчанию являются виртуальными, поэтому можно объявить любой метод final, чтобы предотвратить его переопределение. В C # методы не являются виртуальными по умолчанию, поэтому можно объявить только переопределенные методы sealed (чтобы предотвратить их дальнейшее переопределение)

В Java любую переменную или поле можно объявить final, чтобы предотвратить их изменение после инициализации (а для полей - вне конструктора). В C # поля могут быть объявлены readonly для того же эффекта, но локальные переменные - нет. Обратите внимание, что в Java нет эквивалента ключевого слова const в C #. (const в C # оцениваются во время компиляции, и значения жестко запрограммированы, а не указаны)

Для классов sealed классы C # и final классы Java абсолютно одинаковы (AFAIK).

person SLaks    schedule 15.01.2010
comment
@ Мэтью: Это не опечатка. В C # есть два разных использования ключевого слова sealed. В VB это NotInheritable и NotOverridable - person SLaks; 12.09.2010
comment
Ответ меня несколько сбивает с толку, поэтому я подумал, что это опечатка. sealed - это одно ключевое слово с несколькими контекстными значениями (как и многие ключевые слова, включая final, default, using и т. Д.). C # const используется во многих местах, где Java использует static final; таким образом, я думаю, что это должно быть указано наверху как один из эквивалентов. - person Matthew Flaschen; 12.09.2010
comment
@Matthew: Нет. const в C # не эквивалентно static final. - person SLaks; 12.09.2010
comment
Я знаю, что не существует сопоставления 1 к 1 (final также используется другими способами, которые вы указали), поэтому я сказал много мест. Но если у вас есть константа Java, такая как private static final int MY_NUMBER = 3 (что, конечно, довольно часто), я считаю, что private const int MY_NUMBER = 0; - лучшее отображение на C #; конечно, вы не можете использовать static с константами C #. Таким образом, const является ближайшим эквивалентом некоторых вариантов использования static final. - person Matthew Flaschen; 12.09.2010

Взгляните на этот ответ: Что такое эквивалент финала Java на C #?

person Rubens Farias    schedule 15.01.2010