2010-10-27 9 views
1

Comme le dit le titre. D'après ce que je peux voir en ligne, le mot-clé Overloads est optionnel mais y a-t-il un moment où cela est nécessaire? Il semble même être une erreur lorsqu'il est utilisé dans un module.Le mot clé 'Overloads' est-il déjà requis dans VB.Net?

+0

Cette [page] (http://msdn.microsoft.com/en-us/library/8syxdc22 (v = vs.90) .aspx) sur le MSDN répertorie les mots-clés qui ne peuvent pas être utilisés dans un module. – Hornbydd

+0

duplication possible du mot clé ["Overloads" dans VB.NET] (http://stackoverflow.com/questions/1173257/overloads-keyword-in-vb-net) – Sheridan

Répondre

4

Non, ce n'est pas nécessaire. Vous pouvez surcharger les méthodes et les propriétés sans le mot clé Overloads. Toutefois, si vous utilisez le mot clé Overloads ou Overrides pour une surcharge d'une méthode, vous devez l'utiliser pour toutes les autres surcharges de cette méthode dans la classe.

Vous pouvez utiliser le mot-clé Overloads au lieu du mot-clé Shadows pour masquer une méthode héritée avec la même signature. Ensuite, vous devez utiliser l'un des mots-clés, ils ne sont pas tous deux facultatifs. Vous n'avez pas besoin d'utiliser le mot-clé Overloads pour spécifier une méthode surchargée alors que vous êtes dans la même classe.

+0

Voir [Ombres vs surcharges dans VB.NET] (http : //stackoverflow.com/questions/2515037/shadows-vs-overloads-in-vb-net) pour plus d'informations. –

+0

Difficile à croire que cela n'a pas été corrigé après toutes ces années. 'Overload' n'est pas toujours optionnel - si une autre méthode du même nom dans la même classe remplace une méthode de classe de base, alors 'Overloads' est nécessaire. –

+0

@DaveDoknjas: Lire le deuxième paragraphe. – Guffa

1

C'est ainsi que C# gère la surcharge - il n'y a pas de mot-clé Overloads en C#.
Mais en utilisant le mot-clé Overloads, a tendance à être plus lisible. Pour plus d'informations, consultez this blog post.

+0

Cet article de blog est maintenant un lien mort :-( –

2

Il n'y a qu'un seul cas où le mot-clé Overloads est obligatoire. Si une méthode a le mot clé Overloads alors toute nouvelle méthode du même nom dans le type doit également avoir Overloads

En plus de ce cas, le mot-clé est facultatif.

0

Dans l'intérêt de l'exactitude, je fais cette réponse très tardive depuis que j'ai remarqué que les réponses existantes sont tout simplement incorrectes. Les «surcharges» sont certainement nécessaires dans certains cas, le plus souvent lorsqu'une autre méthode du même nom remplace une méthode de classe de base, comme dans l'exemple suivant - le code ne compile pas si le mot clé Overloads est supprimé:

Public Class One 
    Public Overridable Sub method() 
    End Sub 
End Class 
Public Class Two 
    Inherits One 

    Public Overrides Sub method() 
    End Sub 

    Public Overloads Sub method(ByVal i As Integer) 
    End Sub 
End Class 
+1

Les réponses existantes ne sont pas incorrectes, vous ne les avez pas lues assez attentivement. – Guffa

0

Bizarrement, il y a des moments où vous ne pouvez pas utiliser le mot-clé Overloads. Par exemple:

Module MyModule 
    Overloads Sub MySub(Param1 As String) 
    End Sub 
    Overloads Sub MySub(Param1 As String, Param2 As Integer) 
    End Sub 
End Module 

Le compilateur génère une erreur "Utilisation inappropriée du mot clé 'Overloads' dans un module".

Vous ne savez pas pourquoi, car vous pouvez toujours surcharger la méthode comme d'habitude.