I am reading MCTS Self Paced Training Kit (70-536) Edition 2 and in the 1st chapter we have the following.
How to Declare a Value Type Variable To
The book is mostly correct when it comes to VB, but it fails to mention the difference between VB and C# in this case.
In VB all local variables are automatically initialised:
Sub Test()
Dim x As Integer
MessageBox.Show(x.ToString()) 'shows "0"
End Sub
While in C# local variables are not initialised, and the compiler won't let you use them until they are:
void Test() {
int x;
MessageBox.Show(x.ToString()); // gives a compiler error
}
Also, it's not clear whether the quote from the book is actually talking about local variables or class member variables. Class member variables are always initialised when the class instance is created, both in VB and C#.
The book is wrong when it says that "Value types have an implicit constructor". That is simply not true. A value type is initialised to its default value (if it's initialised), and there is no call to a constructor when that happens.