Types valeur et types référenceValue Types and Reference Types

Il existe deux sortes de types dans Visual Basic : types référence et les types valeur.There are two kinds of types in Visual Basic: reference types and value types. Les variables des types référence font référence à leurs données (objets), tandis que les variables des types valeur contiennent directement leurs données.Variables of reference types store references to their data (objects), while variables of value types directly contain their data. Avec les types référence, deux variables peuvent faire référence au même objet ; par conséquent, les opérations sur une variable peuvent affecter le même objet référencé par l'autre variable.With reference types, two variables can reference the same object; therefore, operations on one variable can affect the object referenced by the other variable. Avec les types valeur, chaque variable possède sa propre copie des données, et il n’est pas possible pour les opérations sur une variable peuvent affecter l’autre (sauf dans le cas de la modificateur ByRef sur les paramètres).With value types, each variable has its own copy of the data, and it is not possible for operations on one variable to affect the other (except in the case of the ByRef modifier on parameters).

Types valeurValue Types

Un type de données est un type valeur s’il conserve des données au sein de sa propre allocation de mémoire.A data type is a value type if it holds the data within its own memory allocation. Les types valeur sont les suivantes :Value types include the following:

  • Tous les types de données numériquesAll numeric data types

  • Boolean, Charet DateBoolean, Char, and Date

  • Toutes les structures, même si leurs membres sont des types référenceAll structures, even if their members are reference types

  • Énumérations, dans la mesure où leur type sous-jacent est toujours SByte, Short, Integer, Long, Byte, UShort, UInteger, ou ULongEnumerations, since their underlying type is always SByte, Short, Integer, Long, Byte, UShort, UInteger, or ULong

Chaque structure est un type valeur, même s’il contient des membres de type référence.Every structure is a value type, even if it contains reference type members. Pour cette raison, types valeur tels que Char et Integer sont implémentés par les structures de .NET Framework.For this reason, value types such as Char and Integer are implemented by .NET Framework structures.

Vous pouvez déclarer un type valeur à l’aide du mot clé réservé, par exemple, Decimal.You can declare a value type by using the reserved keyword, for example, Decimal. Vous pouvez également utiliser le New mot clé pour initialiser un type valeur.You can also use the New keyword to initialize a value type. Cela est particulièrement utile si le type a un constructeur qui accepte des paramètres.This is especially useful if the type has a constructor that takes parameters. Un exemple de ceci est le Decimal(Int32, Int32, Int32, Boolean, Byte) constructeur, ce qui génère un nouveau Decimal valeur à partir des parties fournis.An example of this is the Decimal(Int32, Int32, Int32, Boolean, Byte) constructor, which builds a new Decimal value from the supplied parts.

Types référenceReference Types

Un type référence stocke une référence à ses données.A reference type stores a reference to its data. Types de référence sont les suivants :Reference types include the following:

  • String

  • Tous les tableaux, même si leurs éléments sont des types valeurAll arrays, even if their elements are value types

  • Types de classe, tels que FormClass types, such as Form

  • DéléguésDelegates

Une classe est un type référence.A class is a reference type. Notez que chaque tableau est un type référence, même si ses membres sont des types valeur.Note that every array is a reference type, even if its members are value types.

Étant donné que chaque type de référence représente une classe sous-jacente de .NET Framework, vous devez utiliser le nouvel opérateur mot clé lorsque vous l’initialisez.Since every reference type represents an underlying .NET Framework class, you must use the New Operator keyword when you initialize it. L’instruction suivante initialise un tableau.The following statement initializes an array.

Dim totals() As Single = New Single(8) {}  

Éléments qui ne sont pas des TypesElements That Are Not Types

Les éléments de programmation suivants ne sont pas éligibles en tant que types, car vous ne pouvez pas spécifier une d'entre elles comme type de données pour un élément déclaré :The following programming elements do not qualify as types, because you cannot specify any of them as a data type for a declared element:

  • Espaces de nomsNamespaces

  • ModulesModules

  • ÉvénementsEvents

  • Propriétés et procéduresProperties and procedures

  • Variables, constantes et champsVariables, constants, and fields

Utilisation du Type de données d’objetWorking with the Object Data Type

Vous pouvez affecter un type référence ou un type valeur à une variable de la Object type de données.You can assign either a reference type or a value type to a variable of the Object data type. Un Object variable contient toujours une référence aux données, jamais les données elles-mêmes.An Object variable always holds a reference to the data, never the data itself. Toutefois, si vous affectez un type valeur à une Object variable, il se comporte comme si elle contient ses propres données.However, if you assign a value type to an Object variable, it behaves as if it holds its own data. Pour plus d’informations, consultez Object Data Type.For more information, see Object Data Type.

Vous pouvez déterminer si un Object variable agit comme un type référence ou un type valeur en la passant à la IsReference méthode dans le Information classe de la Microsoft.VisualBasic espace de noms.You can find out whether an Object variable is acting as a reference type or a value type by passing it to the IsReference method in the Information class of the Microsoft.VisualBasic namespace. Information.IsReference Retourne True si le contenu de la Object variable représente un type référence.Information.IsReference returns True if the content of the Object variable represents a reference type.

Voir aussiSee also