web-dev-qa-db-fra.com

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

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

Valeur vis-à-vis des types de référence

Variables en C # sont dans l'un des 2 groupes. Valeur types ou Référence types. Les types tels que int et DateTime sont des types valeur. En revanche, toute classe que vous créez est un type référence. Les chaînes C # sont aussi un type référence. La plupart des éléments du framework .NET sont des types référence.

Parties d'une variable

Il y a la variable nom et c'est valeur. Deux parties.

La variable nom est ce que vous êtes déclarez. La valeur est ce que vous assignez.

Les variables sont initialisées

Toutes les variables reçoivent toujours une valeur initiale au point où la variable est déclarée. Ainsi, toutes les variables sont initialisées.

Pour les types 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 à DateTime.MinValue par défaut.

Référence variables de type initialiser à l'objet que vous lui donnez. Le compilateur ne va pas assigner à 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ée à null.

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 classe.

Le fait de créer une instance d'une classe s'appelle instanciation (Ta-Da!)

Ainsi, déclare, initialise et instancie se rencontrent comme ceci

MyClass myClassyReference= new MyClass();

Dans ce qui précède, il est faux de dire "... créant une instance d'un objet..."

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

Un nom et une valeur de la variable type de référence _ existent indépendamment. Et je veux dire indépendant.

Un objet instancié peut ou non y avoir une référence.

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

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

120
radarbob

Une variable est initialisée avec une valeur. Un objet est instancié lorsque 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ée . Une fois que j'attribue une valeur à la variable 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 est liée puisque l'instanciation est généralement suivie de l'initialisation:

Dim obj As New Object()

Dans la ligne de code précédente, la variable obj est initialisée avec la référence à la nouvelle Object qui était instanciée . Nous disons que la nouvelle Object a été instanciée parce que nous en avons créé une nouvelle instance.

Maintenant, je pense que VB.NET rend cela beaucoup plus déroutant que C # car il n’est pas clair qu’une affectation est en cours dans le code ci-dessus. En C #, il est beaucoup plus clair qu’il existe à la fois une instanciation d’une instance et une initialisation d’une variable:

Object obj = new Object();
39
Andrew Hare

Pour initialiser quelque chose consiste à lui attribuer la valeur initiale. Pour instancier quelque chose, c'est en créer une instance.

C'est souvent la même chose. Ce:

SqlConnection conn = new SqlConnection();

instancie un objet SqlConnection et initialise la variable conn en le définissant sur l'instance correspondante. 

Etant donné que le constructeur d'un objet définit également les propriétés de l'objet sur leurs valeurs par défaut, il est souvent correct de dire que l'instanciation d'un objet l'initialise. (Indécis, 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.)

14
Robert Rossney

* Instanciation signifie créer une instance pour une classe ou un objet. * Initialiser signifie * initier le même objet ou la même classe dans n'importe quel but.

4
Sona

Instancié signifie qu'une instance de l'objet a été créée. Initié signifie que ce même objet a déjà été initialisé.

3
Gabriel McAdams

Lorsque vous instanciez une classe ou un objet, vous créez une nouvelle instance de celle-ci ou allouez de la mémoire pour en "conserver" une. L'initialisation de cet objet correspondrait aux instructions effectuées lors de l'instanciation.

2
typeoneerror

L'instanciation se produit lorsque vous créez une instance d'une classe. Cette instance est alors un objet et vous pouvez définir ses propriétés ou appeler des méthodes dessus (dites-lui de faire certaines choses).

L'initiation se produit lorsque vous définissez un ensemble de conditions initiales pour quelque chose. Ce quelque chose peut être un objet, où vous lui dites de s’initier, ou juste une variable à laquelle vous affectez une valeur.

Un objet peut initialiser d'autres choses, voire en instancier d'autres dans le cadre de son initiation.

La différence est que l’instanciation est la création d’une chose qui peut faire des choses; l'initiation est une chose qui se fait.

2
ChrisA

Voir la documentation Java: https://docs.Oracle.com/javase/tutorial/Java/javaOO/objectcreation.html

"Point originOne = nouveau point (23, 94);

Declaration: The code set in bold are all variable declarations that associate a variable name with an object type.
Instantiation: The new keyword is a Java operator that creates the object.
Initialization: The new operator is followed by a call to a constructor, which initializes the new object."
1
jaros

Nous pouvons le voir de cette façon. Pour une ligne de code ci-dessous: 

var p = new Person();

La ligne ci-dessus peut être lue de deux manières: 

  1. La variable p a été initialisée comme classe de personnes
  2. La classe de personne a été instanciée dans la variable p

Le sujet de référence ou de contexte est important. Quand on parle en termes de variable, on utilise le mot initialize. Quand on parle en termes de class/type, on utilise le mot instantiate.

0
MrClan

L'instanciation fait référence à l'allocation de mémoire pour créer une instance d'une classe alors que l'initialisation consiste à nommer cette instance en lui affectant le nom de la variable.

Exemple: SqlConnection conn = new SqlConnection();

Ici, new est un mot clé qui alloue de la mémoire pour une instance et conn est un nom de variable attribué à cette instance.

0
Rizwan

D'autres ont expliqué la différence, alors je n'entrerai pas dans les détails. Mais il existe des cas où l’instanciation n’initialise pas correctement un objet. Lorsque vous instanciez un objet, vous l'initialisez également avec des données. La classe/type aura la logique d'initialisation, alors que la logique d'instanciation est généralement réalisée par le mot clé new (essentiellement une allocation de mémoire, une copie de référence, etc.). Mais l’instanciation ne doit pas nécessairement donner lieu à un état valide pour les objets, c’est-à-dire quand on peut dire que l’objet est non initialisé . Voici un exemple pratique où un objet peut être instancié mais pas initialisé (par exemple en C #).

class P { string name = "Ralf"; }

WriteLine(new P().name); // "Ralf";
WriteLine((FormatterServices.GetUninitializedObject(typeof(P)) as P).name); // null

GetUninitializedObject n'appelle pas le constructeur pour instancier l'objet (mais un peu de magie interne). 

On pourrait également affirmer que les types de valeur ne sont pas instanciés, mais seulement initialisés, car ils n'ont pas besoin d'une nouvelle allocation lorsque vous utilisez new.., mais cela dépend de la définition de l'instanciation.

0
nawfal