122 votes

Quelle est la différence entre "instancié" et "initialisé" ?

J'ai entendu ces deux mots utilisés dans les tutoriels Microsoft pour VB.NET. Quelle est la différence entre ces deux mots lorsqu'ils sont utilisés en référence à des variables ?

169voto

radarbob Points 1641

Valeur par rapport aux types de référence

Variables en C# sont dans 1 des 2 groupes. Valeur types ou Référence types. Des types comme int y DateTime sont valeur types. En revanche, toute classe que vous créez est un référence type. Les chaînes de caractères C# sont également un référence type. La plupart des éléments du cadre .NET sont référence types.

Parties d'une variable

Il y a la variable nom et son valeur . Deux parties .

La variable nom est ce que vous déclarer qu'il soit. Le site valeur est ce que vous attribuer à elle.

Les variables sont initialisées

Toutes les variables reçoivent toujours un initial au moment où la variable est déclaré . Ainsi, toutes les variables sont initialisé .

Pour valeur comme int le compilateur leur donnera une valeur valide si vous ne le faites pas explicitement. int 's initialiser à zéro par défaut, DateTime 's initialiser a DateTime.MinValue par défaut.

Référence variables de type initialiser à l'objet que vous lui donnez. Le compilateur ne attribuer un objet (c'est-à-dire une valeur valide) si vous ne le faites pas. Dans ce cas, la valeur est null - rien. Nous disons donc que la référence est initialisé à zéro.

Les objets sont instanciés

Les humains sont nés. Les objets sont instanciés. Un bébé est un instance d'un humain, un objet est un instance d'une certaine classe.

L'acte de création d'un instance d'une classe est appelée instanciation (Ta-Da !)

Alors déclarer , initialiser et instancier s'assemblent comme ceci

MyClass myClassyReference = new MyClass();

Dans le texte ci-dessus, il est erroné de dire "... créer une instance d'une objeto ..."


edit - inspiré par la discussion des commentaires

Trois choses distinctes se passent (ci-dessus) en utilisant une terminologie distincte et cette terminologie n'est pas interchangeable :

  1. Une variable de référence est déclarée - MyClass myClassyReference
  2. Un objet est instancié (...à partir d'une donnée classe , implicite) - new MyClass()
  3. L'objet est affecté à la variable. = .

Répéter les faits :

  1. Une variable de type référence est également appelée simplement "une référence". Une "variable de type valeur" n'est pas une référence.

  2. Ça : "l'objetA est une instance d'un objet" est profondément faux. Si l'objetA est "une instance de l'objetB", alors il faut que l'objetA commence sa vie avec le type de l'objetB - quel qu'il soit - et son état actuel - quel qu'il soit. Qu'en est-il de la création des objets D, E, et F lorsque l'objetB change ? Non, non ! C'est le cas conceptuel et technique du "objectA is an instance of a Class". "Instanciation" et "instance de" ont une signification précise - un objet obtient son type, ses définitions et ses valeurs d'une Classe.

  3. MyClass myClassyReference = null En général, nous ne disons pas "la variable est assignée à null" et nous ne disons jamais "la variable fait référence à null", Non. Nous disons plutôt "la variable est nulle" ; ou "la variable ne fait référence à rien", ou "la référence est nulle".

Application pratique :

  • Je pointe mon doigt sur votre code et je dis "cette instance a une propriété invalide. C'est peut-être pour cela que la boucle échoue. Vous devez valider les paramètres pendant l'instanciation". (c'est-à-dire les arguments du constructeur).

  • Je vois ceci dans votre code ,

     MyClass myClassyReference;
     myClassyReference.DoSomething();

    "Vous avez déclaré la variable mais vous ne l'avez jamais assignée. Elle est nulle donc elle ne fait référence à rien. C'est pourquoi l'appel de la méthode lève une exception."

montage final


L'insoutenable légèreté de l'être

A type de référence Le nom et la valeur de la variable existent indépendamment. Et je dis bien indépendant.

Un site instancié peut avoir ou non une référence à cet objet.

Un site instancié peut avoir de nombreuses références à cet objet.

A déclaré la référence peut être ou ne pas être pointant vers un objet.

0 votes

Une explication parfaite !

0 votes

S'il est faux de dire : "... créer une instance d'un objet...", que devriez-vous dire ? "...l'instanciation d'un objet, et l'attribution d'une référence à celui-ci..." ?

0 votes

Ou encore : "...instancier un objet, et initialiser une variable à une référence de celui-ci" ? Cela inclut les deux mots et semble tout expliquer, même si c'est un peu long. Qu'en pensez-vous ?

45voto

Andrew Hare Points 159332

A variable est initialisé avec une valeur. Un site objeto est instancié lorsque de la mémoire lui est allouée et que son constructeur a été exécuté.

Par exemple, voici une variable :

Dim obj as Object

Cette variable n'a pas été initialisé . Une fois que j'ai attribué une valeur à l'élément obj la variable sera initialisée. Voici des exemples d'initialisation :

obj = 1
obj = "foo"

L'instanciation est une chose très différente mais elle est liée puisque l'instanciation est généralement suivie d'une initialisation :

Dim obj As New Object()

Dans la ligne de code précédente, l'élément obj La variable est initialisé avec la référence à la nouvelle Object qui était instancié . Nous disons que le nouveau Object a été instancié car nous avons créé une nouvelle instance de celui-ci.

Je pense que VB.NET rend cela beaucoup plus confus que C# car il n'est pas clair qu'une affectation a lieu dans le code ci-dessus. En C#, il est beaucoup plus clair qu'il y a à la fois une instanciation d'une instance et une initialisation d'une variable :

Object obj = new Object();

0 votes

@Andrew object obj = 1 ; est une initialisation et object obj = new object()/ est une instanciation et une initialisation c'est ce que vous avez mentionné. Maintenant je veux vous demander deux choses. 1. qu'est-ce que c'est ? objet obj ; ? 2. est-ce que la mémoire a été allouée quand j'utilise l'objet obj; ?? ou bien elle est allouée quand je l'initialise avec ce code objet obj = 1; ?

0 votes

Je dirais que "object obj" est la déclaration, et non, la mémoire n'a pas encore été allouée. Ou du moins seulement assez de mémoire pour contenir une valeur de "null". La mémoire réelle de la variable sera allouée en fonction de la valeur une fois qu'elle sera initialisée.

21voto

Robert Rossney Points 43767

A initialiser quelque chose est de le mettre à sa valeur initiale. Pour instancier quelque chose est d'en créer une instance.

Souvent, il s'agit plus ou moins de la même chose. Ceci :

SqlConnection conn = new SqlConnection();

instancie a SqlConnection et initialise le site conn en lui attribuant la valeur de cette instance.

Puisque le constructeur d'un objet définit également les propriétés de l'objet à leurs valeurs par défaut, il est souvent correct de dire que l'instanciation d'un objet l'initialise. (Trompeur, si l'objet expose une méthode que vous devez appeler explicitement pour l'initialiser après son instanciation, comme c'est parfois le cas).

4voto

Sona Points 31

*L'initialisation consiste à créer une instance pour une classe ou un objet. L'initialisation consiste à *initialiser le même objet ou la même classe dans un but quelconque.**

3voto

Gabriel McAdams Points 22323

Instancié signifie qu'une instance de l'objet a été créée. Initiée signifie que ce même objet a effectué une initialisation.

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