2009-03-11 6 views
3

Je suis juste curieux de savoir pourquoi les attributs de classe/propriété dans VB.NET ont une syntaxe bizarre en option tels que:Pourquoi les attributs de classe facultatifs dans VB.NET ont-ils une syntaxe bizarre?

<TestAttr("a", "abc", Optional1:="foo", Optional2:=3)> 

VB.NET vous permet de définir des paramètres optionnels comme celui-ci pour éviter les restrictions d'ordre (qui est belle) mais dans ce cas, il vous oblige à cela.

Par exemple, ce n'est pas possible:

<TestAttr("a", "abc", "foo", 3)> 

même si les paramètres sont dans le même ordre que la définition originale.

Y a-t-il une bonne raison à cela? Ou est-ce juste les concepteurs de .NET étaient paresseux sur le sujet?

Répondre

4

Il semble que vous confondiez des paramètres facultatifs avec des arguments d'attribut nommés ici. Avec les attributs, il est légal de définir un champ public/propriétés de l'attribut qui n'ont aucun paramètre correspondant dans le constructeur. VB.Net a choisi d'avoir la même syntaxe que l'appel par syntaxe de nom.

Si vous ouvrez TestAttr dans le réflecteur, je pense que vous trouverez que la classe a un constructeur qui prend 2 arguments et a 2 champs publics avec les noms Optional1 et Optional2.

+0

Je vois que je n'ai jamais écrit d'attribut, maintenant c'est plus logique. Comme il n'y a pas d'ordre dans le champ public, il ne peut pas être utilisé :) Faites du sens maintenant. –

0

Les paramètres requis sont les paramètres du constructeur. Les facultatifs sont présents en tant que propriétés publiques accessibles en écriture. Il serait nécessaire de créer des constructeurs qui fournissent tous les paramètres. Ce n'est pas toujours valable.