Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the difference between "instantiated" and "initialized"?

Value vis-a-vis Reference Types

Variables in C# are in 1 of 2 groups. Value types or Reference types. Types like int and DateTime are value types. In contrast, any class you create is a reference type. C# strings are also a reference type. Most things in the .NET framework are reference types.

Parts of a Variable

There is the variable name and its value. Two parts.

The variable's name is what you declare it to be. The value is what you assign to it.

Variables are Initialized

All variables are always given an initial value at the point the variable is declared. Thus all variables are initialized.

For value types, like int the compiler will give them a valid value if you do not do so explicitly. int's initialize to zero by default, DateTime's initialize to DateTime.MinValue by default.

Reference type variables initialize to the object you give it. The compiler will not assign an object (i.e. a valid value) if you don't. In this case the value is null - nothing. So we say that the reference is initialized to null.

Objects are Instantiated

Humans are born. Objects are instantiated. A baby is an instance of a Human, an object is an instance of some Class.

The act of creating an instance of a Class is called instantiation (Ta-Da!)

So declare, initialize, and instantiate come together like this

MyClass myClassyReference = new MyClass();

In the above, it is wrong to say "... creating an instance of an object..."


edit - inspired by comments discussion

Three distinct things are going on (above) using distinct terminology and that terminology is not interchangeable :

  1. A reference variable is declared - MyClass myClassyReference
  2. An object is instantiated (...from/of a given class, implied) - new MyClass()
  3. The object is assigned to the variable. =.

Restating the facts:

  1. A reference-type variable is also called simply "a reference". A "value-type variable" is not a reference.

  2. This: "objectA is an instance of an object" is profoundly wrong. If objectA was "an instance of objectB" then it must be that objectA begins life with objectB's type - whatever that is - and current state - whatever that is. What about creating objects D, E, and F as objectB changes? Nay, nay! It is the conceptual and technical case the "objectA is an instance of a Class". "Instantiation" and "instance of" have precise meaning - an object gets its type, definitions, and values from a Class.

  3. MyClass myClassyReference = null Generally we don't say "the variable is assigned to null" and we never say "the variable is referencing null", No. instead we say "the variable is null"; or "the variable is not referencing anything", or "the reference is null"

Practical Application:

  • I jab my finger at your code and say "this instance has an invalid property. Maybe that's why the loop fails. You gotta validate parameters during instantiation." (i.e. constructor arguments).

  • I see this in your code ,

     MyClass myClassyReference;
     myClassyReference.DoSomething();
    

    "You declared the variable but never assigned it. it's null so it's not referencing anything. That's why the method call throws an exception."

end edit


The Unbearable Lightness of Being

A reference type variable's name and value exists independently. And I do mean independent.

An instantiated object may or may not have a reference to it.

An instantiated object may have many references to it.

A declared reference may or may not be pointing to an object.


A variable is initialized with a value. An object is instantiated when memory is allocated for it and it's constructor has been run.

For instance here is a variable:

Dim obj as Object

This variable has not been initialized. Once I assign a value to the obj variable, the variable will be initialized. Here are examples of initialization:

obj = 1
obj = "foo"

Instantiation is a very different thing but is related since instantiation is usually followed by initialization:

Dim obj As New Object()

In the preceding line of code, the obj variable is initialized with the reference to the new Object that was instantiated. We say that the new Object was instantiated because we have created a new instance of it.

Now I believe that VB.NET makes this a lot more confusing than C# because it is not clear that an assignment is taking place in the code above. In C# it is much clearer that there is both an instantiation of an instance and an initialization of a variable:

Object obj = new Object();

To initialize something is to set it to its initial value. To instantiate something is to create an instance of it.

Often this is the more or less same thing. This:

SqlConnection conn = new SqlConnection();

instantiates a SqlConnection object, and initializes the conn variable by setting it to the that instance.

Since an object's constructor also sets the object's properties to their default values, it's often correct to say that instantiating an object initializes it. (Misleading, if the object exposes a method that you have to explictly call to initialize it after it's instantiated, as is sometimes the case.)


*Instantiation means to create an instance for a class or object.Initialization means to *initiate the same object or class for any purpose.**


Instantiated means that an instance of the object has been created. Initiated means that that same object has done some initialization.


When you instantiate a class or object, you're creating a new instance of it, or allocating memory to "hold" one. Initializing that object would be the instructions that are performed during instantiation.


Instantiation is when you create an instance of a class. That instance is then an object, and you can set its properties, or call methods on it (tell it to do things).

Initiation is when you set up a set of initial conditions for something. That something might be an object, where you tell it to initiate itself, or just a variable to which you assign a value.

An object might initialise some other things, or even instantiate other objects as part of its initiation.

The difference is that instantiation is creation of a thing that can do stuff; initiation is stuff that gets done.