Использование @ иногда является результативным. По моему опыту, вы всегда должны отключать отчет об ошибках в php.ini или вызывать
error_reporting(0);
на производственной площадке. Таким образом, когда вы находитесь в разработке, вы можете просто прокомментировать строку и сохранить видимые ошибки для отладки.
Ключевое слово 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 # только в том случае, если вы хотите остановить дальнейшее переопределение метода, который был явно отмечен виртуальным
в базовом классе.
Чтобы разрешить присвоение переменной только один раз:
Java
public final double pi = 3.14; // essentially a constant
C #
public readonly double pi = 3.14; // essentially a constant
В качестве примечания, эффект ключевого слова readonly
отличается от эффекта const
тем, что выражение readonly
вычисляется во время времени выполнения , а не времени компиляции , что позволяет использовать произвольные выражения.
виртуальные
, тогда как C # отмечает их как запечатанные
. Следовательно, вам нужно использовать ключевое слово sealed
в C # только в том случае, если вы хотите остановить дальнейшее переопределение метода, который был явно отмечен виртуальным
в базовом классе.
Чтобы разрешить присвоение переменной только один раз:
Java
public final double pi = 3.14; // essentially a constant
C #
public readonly double pi = 3.14; // essentially a constant
В качестве примечания, эффект ключевого слова readonly
отличается от эффекта const
тем, что выражение readonly
вычисляется во время времени выполнения , а не времени компиляции , что позволяет использовать произвольные выражения.
виртуальные
, тогда как C # отмечает их как запечатанные
. Следовательно, вам нужно использовать ключевое слово sealed
в C # только в том случае, если вы хотите остановить дальнейшее переопределение метода, который был явно отмечен виртуальным
в базовом классе.
Чтобы разрешить присвоение переменной только один раз:
Java
public final double pi = 3.14; // essentially a constant
C #
public readonly double pi = 3.14; // essentially a constant
В качестве примечания, эффект ключевого слова readonly
отличается от эффекта const
тем, что выражение readonly
вычисляется во время времени выполнения , а не времени компиляции , что позволяет использовать произвольные выражения.
Окончание класса Java и окончание метода -> запечатано. Переменная-член Java final -> только для чтения для константы времени выполнения, const для константы времени компиляции.
Нет эквивалента для локальной переменной final и аргумента метода final
Это зависит от контекста.
final
класса или метода эквивалент C # - запечатанный
. final
эквивалент C # - readonly
. final
локальной переменной или параметра метода нет прямого эквивалента C #. Константы C # объявляются с использованием ключевого слова const для констант времени компиляции или ключевого слова только для чтения для констант времени выполнения. Семантика констант одинакова для языков C # и Java.
Что все здесь упускают, так это гарантию Java на однозначное присвоение для конечных переменных-членов.
Для класса C с конечной переменной-членом V, каждый возможный путь выполнения через каждый конструктор C должен присвоить V ровно один раз - если не присвоить V или присвоить V два или более раз, это приведет к ошибке.
Ключевое слово readonly в C# не имеет такой гарантии - компилятор с большим удовольствием оставит члены readonly без назначения или позволит вам назначить их несколько раз в конструкторе.
Таким образом, final и readonly (по крайней мере, в отношении переменных-членов) определенно не эквивалентны - final гораздо более строг.