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

Les variables en C # sont dans 1 des 2 groupes. Types de valeur ou types de référence . Les types comme int et DateTime sont des types de valeur . En revanche, toute classe que vous créez est un type de référence . Les chaînes C # sont également un type de référence . La plupart des éléments du framework .NET sont des types de référence .

Parties d’une variable

Il y a le nom de la variable et sa valeur . Deux parties

Le nom de la variable est ce que vous déclarez être. La valeur est ce que vous lui atsortingbuez .

Les variables sont initialisées

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

Pour les types de valeur , comme int le compilateur leur donnera une valeur valide si vous ne le faites pas explicitement. Par défaut, int s’initialise à zéro, DateTime s’initialise par défaut à DateTime.MinValue .

Les variables de type de référence initialisent à l’object que vous leur donnez. Le compilateur n’affectera pas d’object (c’est-à-dire une valeur valide) si vous ne le faites pas. Dans ce cas, la valeur est null – rien. On dit donc que la référence est initialisée à null.

Les objects sont instanciés

Les humains sont nés. Les objects sont instanciés. Un bébé est une instance d’un humain, un object est une instance d’une classe.

L’acte de créer une instance d’une classe s’appelle l’ instanciation (Ta-Da!)

Alors déclarez , initialisez et instanciez comme ça

 MyClass myClassyReference= new MyClass(); 

Dans ce qui précède, il est faux de dire “… créer une instance d’un object …”

l’insoutenable légèreté de l’être

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

Un object instancié peut ou non avoir une référence à celui-ci.

Un object instancié peut avoir de nombreuses références à celui-ci.

Une référence déclarée peut ou non pointer vers un object.

Une variable est initialisée avec une valeur. Un object 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’affecte 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 d’une 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 au nouvel Object qui a été instancié . Nous disons que le nouvel Object été instancié car nous en avons créé une nouvelle instance.

Maintenant, je crois que VB.NET rend cela beaucoup plus déroutant que C # parce qu’il n’est pas clair qu’une affectation ait 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(); 

Initialiser quelque chose, c’est lui donner sa valeur initiale. Instancier quelque chose, c’est en créer une instance.

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

 SqlConnection conn = new SqlConnection(); 

instancie un object SqlConnection et initialise la variable conn en la définissant sur cette instance.

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

* L’instanciation signifie créer une instance pour une classe ou un object. L’initialisation signifie * lancer le même object ou la même classe pour n’importe quel objective. **

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

Lorsque vous instanciez une classe ou un object, vous en créez une nouvelle ou allouez de la mémoire pour en conserver une. L’initialisation de cet object serait les instructions qui sont effectuées lors de l’instanciation.

L’instanciation est lorsque vous créez une instance d’une classe. Cette instance est alors un object et vous pouvez définir ses propriétés ou y appeler des méthodes (lui dire de faire les choses).

L’initiation consiste à définir un ensemble de conditions initiales pour quelque chose. Ce quelque chose peut être un object, où vous lui dites de s’initier, ou simplement une variable à laquelle vous atsortingbuez une valeur.

Un object peut initialiser d’autres choses ou même instancier d’autres objects 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 un truc qui se fait.

Voir les documents Java: https://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

Point originOne = new 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." 

L’instanciation se réfère à l’allocation de mémoire pour créer une instance d’une classe, tandis que l’initialisation consiste à nommer cette instance en lui atsortingbuant un nom de variable.

Par 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 atsortingbué à cette instance.

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

 class P { ssortingng 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’object (mais une certaine magie interne).

On pourrait également argumenter 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 faites une new.. mais cela dépend de la définition de l’instanciation.

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 comme suit de deux manières:

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

Le sujet de référence ou le contexte est important. En parlant de variable , nous utilisons le mot initialize . En parlant de classe / type , nous utilisons le mot instancier .