pls me dire dans quelle version du mot clé dynamique est introduit? J'ai trouvé un comportement étrange dans VS2010. J'ai défini le cadre cible sur 3.5. Mais il n'y a pas d'erreur de compilateur. Juste creille une application de console avec cadre cible à .NET 3.5 et utiliser le mot-clé dynamique. p>
4 Réponses :
Le type dynamique a été introduit dans .NET 4.0. P>
Le type dynamique n'est pas une fonction de langue uniquement (c'est purement supporté par le compilateur). Il repose sur le DLR qui est une fonctionnalité .NET 4.0 qui nécessite un support de bibliothèque. P>
Vous ne pouvez pas utiliser dynamique et cibler le cadre .NET 3.5. P>
Mais pourquoi il n'y a pas d'erreur de compilateur pour 3.5 Application dans VS 2010
@saokat, vous devez avoir un cerveau pet - vous ne pouvez pas utiliser dynamique avec .NET 3.5. Veuillez vérifier vos paramètres et essayer de compiler à nouveau.
@chibacité, je sais que je ne peux pas utiliser dynamique en 3.5. Mais essayez-vous vous-même. Même je définit prise en chargeRuntime dans le fichier de configuration. Il n'y a pas d'erreur d'exécution.
@saokat Après avoir posté, je me suis essayé juste de m'assurer que je n'imaginais pas les choses - au moins sur ce point je ne suis pas. Je l'ai essayé - il ne compile pas en 3.5.
@chibacité, utilisez-vous VS 2010 ou VS2008.
@saokat j'ai vs2010 et vs2008. J'ai répété dans VS2010.
Comme je l'ai dit dans la réponse acceptée, c'est la bonne réponse; La réponse acceptée est incorrecte, car le compilateur donne une erreur.
Le mot clé dynamique a été introduit dans le cadre de la langue C # 4.0 - Le compilateur est livré avec VS 2010. Son fonctionnalité linguistique et n'a pas besoin d'un support d'exécution (AFAIK), une fois satisfait du compilateur C # 4.0, ne devrait avoir aucun problème avec plus tôt. version de l'exécution. Changer le cadre cible dans VS 2010 ne change pas le compilateur (qui reste à 4.0) - nous recevrons une erreur de compilateur uniquement si vous utilisez une fonctionnalité qui cible la nouvelle bibliothèque ou le temps d'exécution. Par exemple, dans VS 2008, vous pouvez utiliser des expressions Lambda ou un mot-clé Var pour la cible d'exécution 2.0 mais des méthodes d'extension n'étaient pas disponibles car l'attribut d'extension faisait partie de l'assemblage 3.5. P>
Le type dynamique n'est pas une fonctionnalité de langue uniquement, elle est prise en charge par le DLR qui est .NET 4.
@chibacité, je n'aurais mais malheureusement pas vs 2010 sur la machine actuelle. Vous avez probablement raison de dire que la dépendance DLR est nécessaire pour que la dynamique fonctionne - je croyais autrement, car Saokat est en mesure de l'utiliser avec FX 3.5.
Comme la chibacité a dit, je ne pense pas que cela fonctionne, car une bibliothèque spécifique est nécessaire pour appeler de manière dynamique des méthodes qui ne sont pas disponibles sans .NET 4.0.
@Lambert pls vérifier en vs2010
Cette réponse semble être incorrecte ... @saokat: ce code: dynamique x = 10; x.tostring (); code> donne: programme.cs (12,4): Erreur CS1969: Un ou plusieurs types requis pour compiler une expression dynamique ne peut pas être trouvé. Vous manquez des références à Microsoft.csharp.dll et à System.core.dll?
@saokat, la chibacité est absolument correcte! Je ne pouvais même pas compiler dans VS2010 lorsque la cible FX a été modifiée en 3.5. Pouvez-vous partager votre code qui fonctionne - je pense que vous n'auriez peut-être pas utilisé la variation dynamique plus tard dans votre code, de sorte que l'optimisation du compilateur aurait supprimé cela vous permettant de penser que son travail. Essayez d'imprimer votre dynamique et vous devriez voir le problème.
Lorsque vous utilisez Vous ne pouvez pas utiliser Même si vous cible Maintenant, car il est par défaut sur C'est pourquoi, lorsque vous essayez d'utiliser Donc, pour résumer, utiliser Visual Studio 2010 Code>, il est par défaut sur
C # 4.0 code>. p>
C # 3.0 code> avec
Visual Studio 2010 code>. p>
.NET Framework 3.5 code>, il utilisera simplement
Framework 3.5 code> et non
c # 3.0 code>. p>.
C # 4.0 code>, vous pouvez utiliser
dynamique code>. Mais pour que cela fonctionne, vous devez référencer
microsoft.cshaarp.dll code>. Cet assemblage est compilé avec
V 4.0 code>. Vous ne pouvez pas l'utiliser sous
V 3.5 code>. P>
dynamique code> Besoins
DLR (Dynamic Language Runtime) code> Ce qui n'est pas là pour les versions de cadre précédent. P>
dynamique code> sous
Cadre 3.5 code>, il va paniquer. p>
dynamique code>, utiliser
framework 4.0 code>. p>
Il n'y a pas de "C # 3.5". C # 3.0 a été introduit avec .NET 3.5.
Pourquoi est-ce voté à la fois? Le point principal est que vous avez besoin microsoft.csharp.dll code>, ce qui est vrai. +1
Etienne, 3.0 n'a pas été libéré comme un cadre tel que 2.0 / 3.5, il a été libéré de coïncider avec la libération de Windows Vista, car le cadre n'était pas complet à 100% à l'époque, 3,0 expédiés avec Vista, quand il était prêt a été nommé 3.5. (AUTANT QUE JE SACHE)
@Phill Il n'y avait jamais eu de C # 3.5.
@chibacité - Re-Lit I> sur je pensais que c'était faisant référence à .NET Framework, pas c #. Ma faute.
Juste pour le bien de la connaissance: Cette technique s'appelle «polymorphisme par la liaison tardive»
elle a été introduite dans .NET Framework 1.1. C # a acquis cette fonctionnalité dans la version 4.0. Dans Visual Basic, il a été possible de démarrer ces erreurs de compilation avecoud. P> ` p> tout l'astuce est dans laquelle le type" objet "a joué le rôle" objet " du parent de niveau supérieur ainsi que d'une variable dynamique p> p>