|
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
|
Traduction
Source
|
Méthodes d'extension (Visual Basic)
Description
Imports System.Runtime.CompilerServices Module StringExtensions <Extension()> Public Sub Print(ByVal aString As String) Console.WriteLine(aString) End Sub End Module
Module Class1 Sub Main() Dim example As String = "Hello" ' Call to extension method Print. example.Print() ' Call to instance method ToUpper. example.ToUpper() example.ToUpper.Print() End Sub End Module
<Extension()> Public Sub PrintAndPunctuate(ByVal aString As String, ByVal punc As String) Console.WriteLine(aString & punc) End Sub
Code
Imports System.Runtime.CompilerServices Module StringExtensions <Extension()> Public Sub Print(ByVal aString As String) Console.WriteLine(aString) End Sub <Extension()> Public Sub PrintAndPunctuate(ByVal aString As String, ByVal punc As String) Console.WriteLine(aString & punc) End Sub End Module
Imports ConsoleApplication2.StringExtensions Module Module1 Sub Main() Dim example As String = "Example string" example.Print() example = "Hello" example.PrintAndPunctuate(".") example.PrintAndPunctuate("!!!!") End Sub End Module
Commentaires
-
Classes (types référence) -
Structures (types valeur) -
Interfaces -
Délégués -
Arguments ByRef et ByVal -
Paramètres de méthode générique -
Tableaux
Option Strict Off Imports System.Runtime.CompilerServices Module Module4 Sub Main() Dim aString As String = "Initial value for aString" aString.PrintMe() Dim anObject As Object = "Initial value for anObject" ' The following statement causes a run-time error when Option ' Strict is off, and a compiler error when Option Strict is on. 'anObject.PrintMe() End Sub <Extension()> Public Sub PrintMe(ByVal str As String) Console.WriteLine(str) End Sub <Extension()> Public Sub PrintMe(ByVal obj As Object) Console.WriteLine(obj) End Sub End Module
-
Si un membre d'instance accessible existe avec une signature compatible avec les arguments dans l'instruction d'appel, sans conversions restrictives requises d'un argument en un paramètre, la méthode d'instance sera utilisée de préférence à toute méthode d'extension. Par conséquent, si une méthode d'instance appropriée est ajoutée à une classe à un moment donné, un membre d'extension existant auquel vous vous conformez peut devenir inaccessible. -
L'auteur d'une méthode d'extension ne peut pas empêcher d'autres programmeurs d'écrire des méthodes d'extension en conflit qui peuvent être prioritaires sur l'extension d'origine. -
Vous pouvez améliorer la robustesse en plaçant les méthodes d'extension dans leur propre espace de noms. Les consommateurs de votre bibliothèque peuvent ensuite inclure ou exclure un espace de noms, ou réaliser une sélection parmi les espaces de noms, de manière séparée pour le reste de la bibliothèque. -
Il peut être plus sûr d'étendre les interfaces plutôt que d'étendre les classes, notamment si vous ne possédez pas l'interface ou la classe. Une modification dans une interface affecte chaque classe implémentée. Par conséquent, l'auteur peut être moins tenté d'ajouter ou de modifier les méthodes dans une interface. Toutefois, si une classe implémente deux interfaces qui ont des méthodes d'extension avec la même signature, aucune méthode d'extension n'est visible. -
Étendez le type le plus spécifique possible. Dans une hiérarchie de types, si vous sélectionnez un type à partir duquel d'autres types sont dérivés, l'introduction de méthodes d'instance ou d'autres méthodes d'extension peuvent interférer avec les vôtres.
Class ExampleClass ' Define an instance method named ExampleMethod. Public Sub ExampleMethod(ByVal m As Integer) Console.WriteLine("Instance method") End Sub End Class <Extension()> Sub ExampleMethod(ByVal ec As ExampleClass, ByVal n As Long) Console.WriteLine("Extension method") End Sub
Sub Main() Dim example As New ExampleClass Dim arg1 As Long = 10 Dim arg2 As Integer = 5 ' The following statement calls the extension method. example.exampleMethod(arg1) ' The following statement calls the instance method. example.exampleMethod(arg2) End Sub
Class ExampleClass ' Define an instance method named ExampleMethod. Public Sub ExampleMethod(ByVal m As Long) Console.WriteLine("Instance method") End Sub End Class <Extension()> Sub ExampleMethod(ByVal ec As ExampleClass, ByVal n As Integer) Console.WriteLine("Extension method") End Sub
Sub Main() Dim example As New ExampleClass Dim arg1 As Long = 10 Dim arg2 As Integer = 5 ' The following statement calls the instance method. example.ExampleMethod(arg1) ' The following statement calls the instance method. example.ExampleMethod(arg2) End Sub
Imports System.Runtime.CompilerServices Module Module3 Sub Main() Dim ex As New ExampleClass ' The following statement calls the extension method. ex.ExampleMethod("Extension method") ' The following statement calls the instance method. ex.ExampleMethod() End Sub Class ExampleClass ' Define an instance method named ExampleMethod. Public Sub ExampleMethod() Console.WriteLine("Instance method") End Sub End Class <Extension()> Sub ExampleMethod(ByVal ec As ExampleClass, ByVal stringParameter As String) Console.WriteLine(stringParameter) End Sub End Module
Extension method
Instance method
-
Méthodes d'extension définies au sein du module actuel. -
Méthodes d'extension définies au sein de types de données dans l'espace de noms actuel ou dans l'un de ses parents, les espaces de noms enfants étant prioritaires sur les espaces de noms parents. -
Méthodes d'extension définies dans les importations de type dans le fichier en cours. -
Méthodes d'extension définies dans les importations d'espaces de noms dans le fichier en cours. -
Méthodes d'extension définies dans les importations de type au niveau du projet. -
Méthodes d'extension définies dans les importations d'espaces de noms au niveau du projet.