Quel est le point de “statique nouveau” modificateur pour une fonction?
Aujourd'hui, j'ai trouvé quelque chose dans le code de legs. Il a "statique nouveau" pour une fonction. Il ressemble à ceci.
class Foo
{
public static void Do()
{
Console.WriteLine("Foo.Do");
}
}
class Bar: Foo
{
public static new void Do()
{
Console.WriteLine("Bar.Do");
}
}
Je ne comprends pas le statique de la nouvelle modificateur du Ne méthode dans la classe Bar. En C#, méthode statique ne peut être invoquée avec un nom de classe à la place du nom de l'objet. Donc, je ne pense pas qu'il y a une différence entre avoir de la "nouvelle" et pas.
Généralement, si certains de la syntaxe est inutile, C# de traitement, c'est une erreur.
Quelqu'un a la moindre idée de pourquoi C# permet par exemple de syntaxe?
Vous devez vous connecter pour publier un commentaire.
Si vous supprimez le nouveau à partir de votre code, vous bénéficiez de:
Le compilateur C# juste vous avertit que vous pourriez être en train de faire quelque chose que vous n'avez pas l'intention, et vous demande d'insérer le nouveau mot-clé pour confirmer que vous savez ce que vous faites. En plus de la suppression de l'avertissement, il n'a pas d'autres effets.
Qui s'applique uniquement pour les appelants externes. N'oubliez pas que vous pouvez appeler une méthode statique de la classe de base, donc quelque chose comme ceci est valable:
C'est pourquoi l'avertissement vous indique de mettre la nouvelle, vous voulez éviter toute confusion lors de cette opération:
ont un coup d'oeil à cette
Votre exemple, pour la rendre claire, devrait être
Dans votre exemple, la deuxième classe de la Barre ne semble pas hériter de Foo. Cela semble être une faute de frappe car il n'a pas de sens contraire.
En supposant que ce soit une faute de frappe, le "nouveau" modificateur explicitement cache la version de classe de base de la fonction
Do()
. Cela signifie que la version dérivée de laDo()
méthode remplace la version de classe de base.À l'aide de la "nouvelle" ici des documents sur le fait que la méthode héritée est conçu comme un remplacement pour la version de classe de base de
Do()
.Pour plus d'informations, voir nouveau Modificateur (C#)