39 votes

VB.NET : impossible d'utiliser la méthode Extension sur une instance System.Object

Puis-je faire une méthode Extension pour toutes les sous-classes de System.Object (tout) ?

Exemple :

<Extension>
Public Function MyExtension(value As Object) As Object
    Return value
End Function

Les fonctions ci-dessus ne fonctionneront pas pour l'instance objet :

Dim myObj1 As New Object()
Dim myObj2 = myObj1.MyExtension()

Le compilateur ne l'accepte pas, le problème est-il dans mon ordinateur ? :)

UPDATE
Le problème semble se produire uniquement en VB, où les membres de l'objet sont consultés par réflexion ( en retard ).

MISE À JOUR APRÈS RÉPONSE
Pour votre information, vb a un avantage que C# n'a pas, à savoir que les membres des modules importés sont importés dans la portée globale, ce qui vous permet d'utiliser ces fonctions sans leur enveloppe :

Dim myObj2 = MyExtension(myObj1)

0 votes

1) C'est maintenant possible en C# avec la fonction using static <namespace.type> pour importer des membres dans la portée actuelle. 2) Le problème semble se produire uniquement en VB, où les membres de l'objet sont consultés par réflexion. N'est-ce pas seulement vrai si Option Strict Off ?

-5voto

Andrew Points 169

Si vous faites trop d'extensions sur un objet, l'intelligence peut devenir moins utile, mais c'est parfaitement valable.

Voici un exemple d'une méthode d'extension sur un objet pour obtenir des informations sur l'objet :

http://www.developer.com/net/csharp/article.php/3718806/NET-Tip-Using-Extension-Methods.htm

1 votes

L'article en lien fait référence aux méthodes d'extension en C#, et non en VB.NET ; en tant que tel, il n'est pas pertinent pour la question.

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