System.Array sert de classe de base pour Tous les tableaux dans la langue commune Runtime (CLR). Selon Cet article < / a>: Pour chaque type de tableau de béton, [the] Runtime ajoute trois méthodes spéciales: et en effet si je désassemble ce code C #, p> dans cil i get, p> Où les appels vers les en particulier, j'aimerais savoir si c'est possible d'obtenir un objet
obtenez code> /
/
/
adresse p>. p>.
blockQuote>
obtiennent ci-dessus code> et
définir code> peuvent être clairement vus. Il semble que l'arité de ces méthodes est liée à la dimensionnalité de la matrice, ce qui est probablement pourquoi ils sont créés par le temps d'exécution et ne sont pas pré-déclarés. Je ne pouvais pas localiser aucune information sur ces méthodes sur MSDN et leurs noms simples les rendent résistants à Googling. J'écris un compilateur pour une langue qui soutient des tableaux multidimensionnels, je voudrais donc trouver une documentation officielle sur ces méthodes, dans quelles conditions je peux m'attendre à ce qu'ils existent et ce que je puisse s'attendre à ce que leurs signatures soient. P. >
MethodInfo code> pour
Obtenir code> ou
définir code> pour une utilisation avec < Code> réflexion.emit code> sans avoir à créer un em> de la matrice avec type et dimensionnalité corrects sur lesquels refléter, comme cela est fait dans l'exemple lié. P> P> P> P> P> P> P> P> P> P> >
3 Réponses :
Je ne sais pas si cela abordera votre question très spécifique, mais un excellent texte sur le sujet (entre autres) est CLR via C # . Il devient très approfondi pour bon nombre des sujets qui vous intéressent et dépense beaucoup de temps avec le désassemblant en regardant les travaux internes de nombreux types de base .NET, y compris des tableaux. Vaut certainement la peine de vérifier. P>
Merci de me rappeler de regarder CLR via C #, que j'ai ici. Je viens de lire à travers le chapitre 13: des tableaux mais je ne peux voir aucune mention des méthodes d'obtention, de définir et d'adresser.
Regardez ici, en particulier Section 14.2 aux pages 63-65 P>
Mais le rabattre, et vous pouvez dire à l'IL, c'est qu'ils sont les méthodes de getter et de réglage pour traiter des tableaux aux positions indiquées. P>
• une méthode d'obtenir qui prend une séquence de Les arguments int32, un pour chaque dimension de la matrice et retourne un valeur dont le type est le type d'élément de la matrice. Cette méthode est utilisée pour accéder à un élément spécifique du tableau où les arguments spécifient l'index dans chaque dimension, en commençant par le premier, de l'élément à être retourné. p>
• une méthode définie qui prend une séquence d'arguments int32, un pour chaque dimension de la matrice, suivie d'un valeur dont le type est le type d'élément de la matrice. Le type de retour de l'ensemble est annulé. Cette méthode est utilisée pour définir un élément spécifique du tableau où Les arguments spécifient l'index dans chaque dimension, en commençant par le d'abord, de l'élément à régler et L'argument final spécifie la valeur être stocké dans l'élément cible. P>
• une méthode d'adresse qui prend un séquence d'arguments int32, un pour chaque dimension de la matrice et a un Type de retour qui est un pointeur géré au type d'élément de la matrice. Cette la méthode est utilisée pour renvoyer une gestion gérée pointeur sur un élément spécifique de la tableau où les arguments spécifient le indice dans chaque dimension, début avec le premier, de l'élément dont l'adresse doit être retournée. P> blockQuote>
edit: strong> Les pages 63-65 utilisent la numérotation de la page du document. 73-75 dans le PDF actuel. P>
Excellent! C'est exactement ce que je cherchais. Merci.
Pour répondre à votre deuxième question, vous n'avez pas besoin de créer une instance pour obtenir un fonctionnera pour obtenir la méthode méthodyinfo code> pour ces méthodes. Quelque chose comme
obtenir code> pour la chaîne
[] code> type. P> p>
Splendide! Maintenant, j'ai tout ce que je suis venu.
J'ai par la suite découvert que des soins sont nécessaires lors de la sélection entre les surcharges de MakearrayType. Sans arguments - MakearrayType () crée un type de vecteur tel que String []. Avec un argument d'un - MakearrayType (1) crée une matrice multidimensionnelle avec une dimension de type chaîne [*]. Ces types ne sont pas compatibles. Pour l'interopérabilité avec les autres langues .NET, cela signifie que lorsque le rang == 1 1, vous devrez être spécialisé l'appel à la méthode sans paramètre.
@Rob: Avez-vous un exemple pour la méthode code> code>? Et avez-vous un lien décrivant le fait que ces méthodes sont générées?
@John - Si vous cliquez sur le lien "Cet article" dans mon paragraphe d'ouverture, vous finirez par l'article à partir de laquelle la citation du deuxième paragraphe est prise.