588 votes

Quel est l'équivalent du final de Java en C# ?

Quel est l'équivalent de la méthode Java final en C# ?

137 votes

Un commentaire en haut de la classe disant "Si vous outrepassez cette classe, vous êtes viré !". (bien sûr, c'est une blague :)

889voto

Noldorin Points 67794

Le site final Le mot-clé a plusieurs usages en Java. Il correspond à la fois au sealed et readonly en C#, en fonction du contexte dans lequel il est utilisé.

Classes

Pour empêcher la sous-classification (héritage à partir de la classe définie) :

Java

public final class MyFinalClass {...}

C#

public sealed class MyFinalClass {...}

Méthodes

Empêcher la surcharge d'un virtual méthode.

Java

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

C#

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

Comme le souligne Joachim Sauer, une différence notable entre les deux langages ici est que Java marque par défaut toutes les méthodes non-statiques comme virtual alors que C# les marque comme sealed . Par conséquent, il suffit d'utiliser l'option sealed en C#, si vous souhaitez empêcher la surcharge d'une méthode qui a été explicitement marquée virtual dans la classe de base.

Variables

Pour permettre à une variable d'être assignée une seule fois :

Java

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

C#

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

À titre d'information, l'effet de la readonly diffère de celui de la const en ce sens que le readonly est évaluée à temps de fonctionnement plutôt que temps de compilation ce qui permet des expressions arbitraires.

15 votes

J'ajouterais que toutes les méthodes non statiques en Java sont virtuelles par défaut. Ainsi, alors qu'en C#, vous pouvez simplement omettre le terme "virtual" dans la définition initiale, vous devrez utiliser "final" pour éviter que les sous-classes ne le surchargent en Java.

174 votes

bonne réponse - il y a cependant une autre utilisation de "final" en java - sur une variable locale ou un paramètre de méthode pour empêcher sa réaffectation. Il n'y a pas d'équivalent direct en C#.

17 votes

readonly variables membres peut être modifié dans les constructeurs : pastebin.com/AzqzYGiA

194voto

LukeH Points 110965

Cela dépend du contexte.

1 votes

En fait, il n'est pas nécessaire qu'une variable finale soit affectée lors de sa déclaration. Le terme "final" signifie que la variable doit être assignée par un chemin de code quelconque avant d'être référencée et qu'aucun chemin de code ne permet d'assigner la variable plus d'une fois. Cela s'applique aux variables d'instance, ce qui signifie en fait que les constructeurs doivent assigner la variable explicitement.

37 votes

+ pour For a final local variable or method parameter, there's no direct C# equivalent une énorme distinction.

1 votes

Si vous êtes instanciation de , const pour une variable locale peut être utilisée. Ce n'est pas équivalent car bien sûr final vous permet de déclarer et d'initialiser séparément (et donc d'avoir des valeurs différentes), mais juste au cas où vous ne le sauriez pas...

48voto

Some guy Points 191

Ce qui manque à tout le monde ici, c'est la garantie par Java de l'affectation définitive des variables membres finales.

Pour une classe C avec une variable membre finale V, chaque chemin d'exécution possible à travers chaque constructeur de C doit assigner V exactement une fois - ne pas assigner V ou assigner V deux fois ou plus entraînera une erreur.

Le mot-clé readonly de C# n'offre pas une telle garantie - le compilateur est plus qu'heureux de laisser les membres readonly non assignés ou de vous permettre de les assigner plusieurs fois dans un constructeur.

Ainsi, final et readonly (du moins en ce qui concerne les variables membres) ne sont absolument pas équivalents - final est beaucoup plus strict.

6voto

Vijayakumarpl Points 36

Classe Java final et méthode final -> scellé. Variable membre Java final -> readonly pour une constante d'exécution, const pour une constante de compilation.

Pas d'équivalent pour Local Variable final et method argument final

5voto

krzyk Points 1044

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

Les constantes C# sont déclarées à l'aide du mot clé const pour les constantes de compilation ou du mot clé readonly pour les constantes d'exécution. La sémantique des constantes est la même dans les langages C# et Java.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X