146 votes

Est de type int[] une référence de type ou d'un type de valeur?

Je connais un type int est un type de valeur, mais ce sont des tableaux de types de valeur? Les types de référence? Types de valeur? Je veux passer un tableau à une fonction pour vérifier quelque chose. Devrais-je passer le tableau, comme il vient de passer la référence de, ou devrais-je passer comme ref?

232voto

Yannick Motton Points 9806

Les tableaux sont des mécanismes qui vous permettent pour traiter plusieurs points comme un seul collection. Microsoft® .NET Commun Language Runtime (CLR) prend en charge unique dimensions des tableaux, les tableaux multidimensionnels, et déchiqueté les tableaux (tableaux de tableaux). Tous les array les types sont implicitement dérivées de Système.Tableau, qui lui-même est dérivé à partir du Système.Objet. Cela signifie que tous les tableaux sont toujours les types de référence qui sont allouées sur la gestion de l' tas, et votre application est variable contient une référence à la matrice et de ne pas le tableau lui-même.

http://msdn.microsoft.com/en-us/magazine/cc301755.aspx

38voto

Alex Reitbort Points 9120

Le simlest test de type de référence vs le type de valeur est ce type de référence peut être nulle, mais la valeur de type de ne peut pas.

17voto

Joshua Tompkins Points 814

Les tableaux (même de la valeur de type int) sont des types référence en C#.

http://msdn.microsoft.com/en-us/library/aa288453%28VS.71%29.aspx:

En C#, les tableaux sont en fait des objets. Système.Tableau est le type de base abstrait de tous les types de tableau.

3voto

Scott Dorman Points 25000

Le tableau lui-même est un type de référence. Les valeurs de ce tableau sont des valeurs ou des types de référence tel que déterminé par le type de données de tableau. Dans votre exemple, le tableau est un type de référence et les valeurs sont des valeurs types.

Tous les tableaux unidimensionnels implicitement mettre en oeuvre IList<T><T> est le type de données de la matrice. Vous pouvez utiliser cette interface comme type de données de votre paramètre de méthode à la place. Vous pouvez également utiliser IEnumerable<T> pour le type de données. Dans les deux cas (ou même si vous venez d'utiliser int[]) vous ne devriez pas avoir besoin de transmettre explicitement comme un ref paramètre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X