Что эквивалентно финалу Java в C #?

Использование @ иногда является результативным. По моему опыту, вы всегда должны отключать отчет об ошибках в php.ini или вызывать

error_reporting(0);

на производственной площадке. Таким образом, когда вы находитесь в разработке, вы можете просто прокомментировать строку и сохранить видимые ошибки для отладки.

532
задан Stephen Kennedy 6 March 2018 в 10:48
поделиться

6 ответов

Ключевое слово final имеет несколько применений в Java. Он соответствует ключевым словам sealed и readonly в C #, в зависимости от контекста, в котором он используется.

Классы

Для предотвращения создания подклассов (наследование от определенного класса ):

Java

public final class MyFinalClass {...}

C #

public sealed class MyFinalClass {...}

Методы

Предотвращение переопределения виртуального метода .

Java

public class MyClass
{
    public final void myFinalMethod() {...}
}

C #

public class MyClass : MyBaseClass
{
    public sealed override void MyFinalMethod() {...}
}

Как указывает Иоахим Зауэр, заметное различие между двумя языками заключается в том, что Java по умолчанию отмечает все нестатические методы как виртуальные , тогда как C # отмечает их как опломбированный . Следовательно, вам нужно использовать ключевое слово sealed в C # только в том случае, если вы хотите остановить дальнейшее переопределение метода, который был явно отмечен виртуальным в базовом классе.

Variables

Чтобы разрешить присвоение переменной только один раз:

Java

public final double pi = 3.14; // essentially a constant

C #

public readonly double pi = 3.14; // essentially a constant

В качестве примечания, эффект ключевого слова readonly отличается от эффекта const тем, что выражение readonly вычисляется во время времени выполнения , а не времени компиляции , что позволяет использовать произвольные выражения.

Заметное различие между двумя языками заключается в том, что Java по умолчанию отмечает все нестатические методы как виртуальные , тогда как C # отмечает их как запечатанные . Следовательно, вам нужно использовать ключевое слово sealed в C # только в том случае, если вы хотите остановить дальнейшее переопределение метода, который был явно отмечен виртуальным в базовом классе.

Variables

Чтобы разрешить присвоение переменной только один раз:

Java

public final double pi = 3.14; // essentially a constant

C #

public readonly double pi = 3.14; // essentially a constant

В качестве примечания, эффект ключевого слова readonly отличается от эффекта const тем, что выражение readonly вычисляется во время времени выполнения , а не времени компиляции , что позволяет использовать произвольные выражения.

Заметное различие между двумя языками заключается в том, что Java по умолчанию отмечает все нестатические методы как виртуальные , тогда как C # отмечает их как запечатанные . Следовательно, вам нужно использовать ключевое слово sealed в C # только в том случае, если вы хотите остановить дальнейшее переопределение метода, который был явно отмечен виртуальным в базовом классе.

Variables

Чтобы разрешить присвоение переменной только один раз:

Java

public final double pi = 3.14; // essentially a constant

C #

public readonly double pi = 3.14; // essentially a constant

В качестве примечания, эффект ключевого слова readonly отличается от эффекта const тем, что выражение readonly вычисляется во время времени выполнения , а не времени компиляции , что позволяет использовать произвольные выражения.

837
ответ дан 22 November 2019 в 22:23
поделиться

Окончание класса Java и окончание метода -> запечатано. Переменная-член Java final -> только для чтения для константы времени выполнения, const для константы времени компиляции.

Нет эквивалента для локальной переменной final и аргумента метода final

6
ответ дан 22 November 2019 в 22:23
поделиться

Это зависит от контекста.

171
ответ дан 22 November 2019 в 22:23
поделиться

опломбированный

0
ответ дан 22 November 2019 в 22:23
поделиться

http://en.csharp-online.net/CSharp_FAQ:_What_are_the_differences_between_CSharp_and_Java_constant_declarations

Константы C # объявляются с использованием ключевого слова const для констант времени компиляции или ключевого слова только для чтения для констант времени выполнения. Семантика констант одинакова для языков C # и Java.

5
ответ дан 22 November 2019 в 22:23
поделиться

Что все здесь упускают, так это гарантию Java на однозначное присвоение для конечных переменных-членов.

Для класса C с конечной переменной-членом V, каждый возможный путь выполнения через каждый конструктор C должен присвоить V ровно один раз - если не присвоить V или присвоить V два или более раз, это приведет к ошибке.

Ключевое слово readonly в C# не имеет такой гарантии - компилятор с большим удовольствием оставит члены readonly без назначения или позволит вам назначить их несколько раз в конструкторе.

Таким образом, final и readonly (по крайней мере, в отношении переменных-членов) определенно не эквивалентны - final гораздо более строг.

42
ответ дан 22 November 2019 в 22:23
поделиться
Другие вопросы по тегам:

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