J'ai quelque chose d'étrange dans vb.net, ne remarquez jamais avant ...
J'ai une classe dans vb.net em> strong> ayant une propriété voici mon code ... p> Remarque: strong> Je ne peux pas changer le code vb.net tel qu'il est compilé Dll. P> merci d'avance p> p>
3 Réponses :
Les propriétés paramétrées sont converties en Obtenir code> et
définir code> méthodes.
C # ne prend pas en charge les propriétés indexées qui n'ont pas le mot clé par défaut. Vous utilisez simple get_asstring () pour appeler la propriété getter et set_asstring () pour appeler le Setter. Méthodes, non propriétés. Ils devraient facilement apparaître dans la liste IntelliSense. P>
Notez également que SET_ASSTRING () nécessite des arguments Deux em>, même si vous avez créé le poste de propriété non indexé. Passer n'importe quoi, NULL fera. P>
FWIW, il s'agit peut-être d'illustrer la raison pour laquelle l'équipe C # a décidé de ne pas soutenir les propriétés indexées dans le cas général. L'inadéquation entre le getter et le setter est douloureuse. L'équipe VB.NET n'avait pas le choix, Visual Basic les avait avancé longtemps avant que .NET ne soit arrivé. Il a fait un retour partiel en C # Version 4, cependant, les propriétés indexées sont prises en charge sur les interfaces COM. Com Interop La programmation est trop douloureuse sans eux. En particulier dans le modèle d'objet Office. P>
De quoi parlez-vous? Le constructeur de propriétés est indexé; La "liste des paramètres" du setter inclut uniquement la valeur, car c'est la seule chose qui n'a pas été spécifiée dans la définition de la propriété elle-même. Il peut y avoir une légère ambiguïté apparente si une propriété indexée et non indexée a le même nom et que le type de propriété non indexée a une indexeur par défaut, mais en réalité, il n'y a pas d'ambiguïté: chose.prop (x ) code> se liera à une propriété indexée appropriée si l'on existe; Si l'on veut utiliser le résultat non indexé et indexer, on peut utiliser
(chose.prop) (x) code>.
Une telle chose pourrait être utile si on avait μg. Un dictionnaire qui a conservé des clés et des valeurs dans l'ordre à laquelle ils ont été ajoutés et autorisés à accéder aux clés ou aux valeurs via un index numérique, en plus de permettre l'accès des valeurs via les touches. MyDict.Keys (2) Code> serait la troisième clé ajoutée et
myDICK.Values (2) code> serait sa valeur correspondante. On pourrait obtenir des résultats similaires en ayant
mydic.Keys code> et
mydic.values code> à chaque renvoi d'une structure qui détenait une référence au dictionnaire et avait un indexeur qui appellerait une fonction appropriée Sur ce dictionnaire, mais ce serait Ickier.
S'ils le faisaient comme dans C ++ / CLI et appliqué que Getter and Setter doit définir et utiliser les mêmes paramètres, il ne devrait pas y avoir de confusion: Source de chaîne publique [int i_ixsource] {get (int i_ixsource) { ...} SET (INT I_IXSOURCE) {...}}}} Code> C'est une grosse douleur dans le cul pour moi de travailler autour des dizaines de belles propriétés paramétrées que j'ai implémentées dans mon code C ++ / CLI lors de la conversion en C # .
Si vous avez remarqué en réalité, vous avez deux paramètres de votre propriété, un nom de votre propriété et une autre est la valeur par défaut, vous devez donc donner une valeur de deux paramètres lorsque vous travaillez avec ce p>
Qu'entendez-vous par une propriété avec paramètre?
Pourquoi mentionnez-vous le CLR ?
Je sais que c'est 4 ans plus tard, mais je n'ai pas eu à le faire jusqu'à présent. Il est donc toujours le cas que c # ne prend pas en charge les propriétés ayant des paramètres? Je l'ai vu dans VB, mais je ne l'ai jamais vu dans C #. Je présume que la réponse est oui, c # ne supporte pas cela. Je veux juste vérifier cela.
@Rod YES, C # ne prend pas en charge cela, à l'exception d'une seule propriété par défaut implémentée en tant qu'indexeur via
Ceci code>. Voir Ce