IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Equivalent du mot-clé dynamic (C#) en Visual Basic [Débutant]


Sujet :

VB.NET

  1. #1
    Invité
    Invité(e)
    Par défaut Equivalent du mot-clé dynamic (C#) en Visual Basic
    Bonjour tout le monde,

    Ne jamais écrire 3 messages d'affilés sans 4 sur un forum dit-on ... non ?

    J'ai traduit le code suivant en VB : http://blogs.msdn.com/b/shawnhar/arc...c-dynamic.aspx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Namespace SampleHeritage
        Class Animal
        End Class
     
        Class Cat : Inherits Animal
        End Class
     
        Class Dog : Inherits Animal
        End Class
     
        Class Mouse : Inherits Animal
        End Class
     
     
        Module M1
            'We can create several overloads of the same method, specialized according to different combinations of their parameter types:
            Sub ReactSpecialization([me] As Animal, other As Animal)
                Console.WriteLine("{0} is not interested in {1}.", [me], other)
            End Sub
            Sub ReactSpecialization([me] As Cat, other As Dog)
                Console.WriteLine("Cat runs away from dog.")
            End Sub
            Sub ReactSpecialization([me] As Cat, other As Mouse)
                Console.WriteLine("Cat chases mouse.")
            End Sub
            Sub ReactSpecialization([me] As Dog, other As Cat)
                Console.WriteLine("Dog chases cat.")
            End Sub
     
            'And now the magic part:
            Sub React([me] As Animal, other As Animal)
                ReactSpecialization([me], other)
            End Sub
     
            'This works because of the "as dynamic" cast, which tells the C# compiler, 
            'rather than just calling ReactSpecialization(Animal, Animal), 
            'to dynamically examine the type of each parameter and make a runtime choice 
            'about which method overload to invoke.
     
            'To prove it really works:
            Sub Test()
                Dim cat As Animal = New Cat()
                Dim dog As Animal = New Dog()
                Dim mouse As Animal = New Mouse()
     
                React(cat, dog)
                React(cat, mouse)
                React(dog, cat)
                React(dog, mouse)
            End Sub
     
            'Output:
     
            '    Cat runs away from dog.
            '    Cat chases mouse.
            '    Dog chases cat.
            '    Dog is not interested in Mouse.
        End Module
    End Namespace
    En langage C# et en utilisant un type Dynamic (as dynamic), la sortie du Debug.Print est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            'Output:
     
            '    Cat runs away from dog.
            '    Cat chases mouse.
            '    Dog chases cat.
            '    Dog is not interested in Mouse.
    Si on essaye ce code en VB, la sortie sera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    '    Cat is not interested in Dog.
    '    Cat is not interested in Mouse.
    '    Dog is not interested in Cat.
    '    Dog is not interested in Mouse.
    parce que j'ai remplacé le Type dynamic (C#) en type Animal.

    D'après vous, comment obtenir le même résultat qu'en C#.
    On voit qu'en exécutant le code, le "Sous-type" est bien respectivement Cat, Dog et Mouse lors de l'initialisation dans la procédure Sub Test().

    Merci.

    @+

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir Nouveau2,

    Le type dynamic en C# corresponds à un type dynamique en VbNet donc "Object", ton code devrait donc être le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     'And now the magic part:
        Sub React([me], other)
            ReactSpecialization([me], other)
        End Sub

    A+

  3. #3
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Le mot clef dynamic permet d'utiliser le "late binding" (liaison tardive) en C#.
    Le late binding existe depuis la toute première version de VB.Net pour l'utiliser il suffit simplement d'utiliser Object comme type (sous réserve soit le projet dans sa globalité soit le fichier en question soit placée sous la directive Option Strict Off)
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Ah nickel

    Merci à tous les 2.

    Au debut, j'été parti sur l'option Infer = On comme équivalent du dynamic, mais celle-ci ne fonctionne que dans les procédures et non dans les retour de fonctions / passage de paramètres (?).
    L'option Strict = Off suffit apparemment donc.

    Citation Envoyé par wallace1 Voir le message
    Merci pour ce complément d'infos, tu es à la programmation ce que Larousse est au vocabulaire français.

    On dirai bien
    Dernière modification par rv26t ; 20/07/2014 à 13h53. Motif: fusion de message

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. le mot clé dynamic est absurde !
    Par ijk-ref dans le forum C#
    Réponses: 22
    Dernier message: 25/06/2011, 08h57
  2. Réponses: 1
    Dernier message: 27/10/2008, 17h39
  3. Equivalence fonction Get de visual basic
    Par berpi dans le forum Débuter
    Réponses: 4
    Dernier message: 10/02/2008, 23h50
  4. Equivalent du mot réservé TypeOf de VB
    Par AL1986 dans le forum Langage
    Réponses: 7
    Dernier message: 07/08/2007, 14h36
  5. [C#] Equivalent méthode RGB de Visual Basic
    Par frechy dans le forum C#
    Réponses: 11
    Dernier message: 13/11/2005, 01h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo