Что эквивалентно окончанию Java в C #?

Что эквивалентно окончанию Java в C #?

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

    Классы

    Чтобы предотвратить подclass (наследование из определенного classа):

    Ява

     public final class MyFinalClass {...} 

    C #

     public sealed class MyFinalClass {...} 

    методы

    Предотrotation переопределения virtual метода.

    Ява

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

    C #

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

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

    переменные

    Чтобы разрешить только одну переменную:

    Ява

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

    C #

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

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

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

    • Для final classа или метода эквивалент C # sealed .
    • Для final поля эквивалент C # – только для readonly .
    • Для final локального параметра или параметра метода нет прямого эквивалента C #.

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

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

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

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

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

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

    Как уже упоминалось, sealed эквивалент final для методов и classов.

    Что касается остальных, то это сложно.

    • На константе (статической), определенной в объявлении, const можно считать эквивалентом, при условии, что это примитивный тип или неизменяемый class.
    • В поле, которое не следует переназначать, когда оно покидает конструктор, можно использовать readonly , но оно не равно – final требует ровно одного присваивания даже в конструкторе.
    • Локальная переменная, которая должна быть назначена только один раз, не может быть создана на C #, я полагаю. Если вам интересно, зачем кому-то это нужно: вы можете объявить переменную до некоторого if-else, switch-case или так. Объявляя его окончательным, вы обеспечиваете, чтобы ему назначалось ровно один раз, если нет, произошла ошибка компилятора. Это требует хорошего поведения кода, поэтому ошибок меньше.

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

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

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

    запечатанный

    Давайте будем гением компьютера.