Visual Basic .NET Language
Méthodes d'extension
Recherche…
Remarques
Les méthodes d'extension sont des méthodes ( Sub
ou Function
) qui ajoutent des fonctionnalités à un type (qui peut être un type de référence ou un type de valeur). Ces Types peuvent ou non vous appartenir.
Ils peuvent ou peuvent ne pas être dans le même assemblage que le type qu'ils sont destinés à modifier. Vous pouvez autoriser un opt-in à vos méthodes d'extension en les isolant dans leur propre espace de noms. Ou, si vous préférez, vous pouvez les rendre toujours disponibles en les incluant dans le même espace-nom que le type qu'ils modifient (en supposant que toutes les références d'assemblage sont en place et correctes). Voir le projet Entity Framework Core 1.0 sur GitHub pour un bon exemple du style opt-in des méthodes d'extension.
Les méthodes d'extension dans VB ont quelques exigences:
- Les méthodes d'extension ne peuvent être déclarées que dans des modules.
- Les méthodes d'extension doivent être décorées avec l'attribut
Extension()
. - L'espace de noms ExtensionAttribute doit être disponible dans votre module.
Imports System.Runtime.CompilerServices
- Le premier paramètre de la méthode doit être d'un type auquel cette méthode sera associée.
- Le premier paramètre de la méthode représentera l'instance sur laquelle cette méthode fonctionne. (Équivalent à
Me
si c'était une méthode d'instance réelle). - Une méthode d'extension peut être appelée comme méthode régulière en fournissant tous les paramètres si elle n'est pas appelée sur l'objet instancié.
Créer une méthode d'extension
Les méthodes d'extension sont utiles pour étendre le comportement des bibliothèques que nous ne possédons pas.
Ils sont utilisés de manière similaire aux méthodes d'instance grâce au sucre syntaxique du compilateur:
Sub Main()
Dim stringBuilder = new StringBuilder()
'Extension called directly on the object.
stringBuilder.AppendIf(true, "Condition was true")
'Extension called as a regular method. This defeats the purpose
'of an extension method but should be noted that it is possible.
AppendIf(stringBuilder, true, "Condition was true")
End Sub
<Extension>
Public Function AppendIf(stringBuilder As StringBuilder, condition As Boolean, text As String) As StringBuilder
If(condition) Then stringBuilder.Append(text)
Return stringBuilder
End Function
Pour avoir une méthode d'extension utilisable, la méthode nécessite l'attribut Extension
et doit être déclarée dans un Module
.
Rendre le langage plus fonctionnel avec les méthodes d'extension
Un bon usage de la méthode d'extension est de rendre le langage plus fonctionnel
Sub Main()
Dim strings = { "One", "Two", "Three" }
strings.Join(Environment.NewLine).Print()
End Sub
<Extension>
Public Function Join(strings As IEnumerable(Of String), separator As String) As String
Return String.Join(separator, strings)
End Function
<Extension>
Public Sub Print(text As String)
Console.WriteLine(text)
End Sub
Rembourrage numérique
Public Module Usage
Public Sub LikeThis()
Dim iCount As Integer
Dim sCount As String
iCount = 245
sCount = iCount.PadLeft(4, "0")
Console.WriteLine(sCount)
Console.ReadKey()
End Sub
End Module
Public Module Padding
<Extension>
Public Function PadLeft(Value As Integer, Length As Integer) As String
Return Value.PadLeft(Length, Space(Length))
End Function
<Extension>
Public Function PadRight(Value As Integer, Length As Integer) As String
Return Value.PadRight(Length, Space(Length))
End Function
<Extension>
Public Function PadLeft(Value As Integer, Length As Integer, Character As Char) As String
Return CStr(Value).PadLeft(Length, Character)
End Function
<Extension>
Public Function PadRight(Value As Integer, Length As Integer, Character As Char) As String
Return CStr(Value).PadRight(Length, Character)
End Function
End Module
Obtenir la version d'assemblage à partir d'un nom fort
Exemple d'appeler une méthode d'extension en tant qu'extension et méthode régulière.
public Class MyClass
Sub Main()
'Extension called directly on the object.
Dim Version = Assembly.GetExecutingAssembly.GetVersionFromAssembly()
'Called as a regular method.
Dim Ver = GetVersionFromAssembly(SomeOtherAssembly)
End Sub
End Class
La méthode d'extension dans un module. Rendez le module Public si les extensions sont compilées dans une DLL et seront référencées dans un autre assembly.
Public Module Extensions
''' <summary>
''' Returns the version number from the specified assembly using the assembly's strong name.
''' </summary>
''' <param name="Assy">[Assembly] Assembly to get the version info from.</param>
''' <returns>[String]</returns>
<Extension>
Friend Function GetVersionFromAssembly(ByVal Assy As Assembly) As String
Return Split(Split(Assy.FullName,",")(1),"=")(1)
End Function
End Module