ECMA-334: 11.1.2 Default constructors
Microsoft .NET Framework, ASP.NET, Visual C# (CSharp, C Sharp, C-Sharp) Developer Training, Visual Studio
| C# Language Specification |
| © 2006 ECMA International |
11.1.2 Default constructors
All value types implicitly declare a public parameterless instance constructor called the default constructor. The default constructor returns a zero-initialized instance known as the default value for the value type:
- For all simple-types, the default value is the value produced by a bit pattern of all zeros:
- For
sbyte,byte,short,ushort,int,uint,long, andulong, the default value is0.
- For
- For
char, the default value is '\x0000'.
- For
- For
float, the default value is0.0f.
- For
- For
double, the default value is0.0d.
- For
- For
decimal, the default value is0m.
- For
- For
bool, the default value isfalse.
- For
- For an enum-type
E, the default value is0.
- For a struct-type, the default value is the value produced by setting all value type fields to their default value and all reference type fields to
null.
- For a nullable type, the default value is one for which
HasValuereturnsfalse.
Like any other instance constructor, the default constructor of a value type is invoked using the new operator. [Note: For efficiency reasons, this requirement is not intended to actually have the implementation
generate a constructor call. For value types, the default value expression (§14.5.14) produces the same result
as using the default constructor. end note] [Example: In the code below, variables i, j and k are all
initialized to zero.
class A { void F() { int i = 0; int j = new int(); int k = default(int); } }
end example]
Because every value type implicitly has a public parameterless instance constructor, it is not possible for a struct type to contain an explicit declaration of a parameterless constructor. A struct type is however permitted to declare parameterized instance constructors (§18.3.8).