11.10.1 Object-Creation Expressions
An object-creation expression is used to create a new instance of a class type or a structure type. The type of an object creation expression must be a class type or a structure type and cannot be a MustInherit class. Given an object creation expression of the form
New T(A), where
T is a class type or structure type and
A is an optional argument list, overload resolution determines the correct constructor of
T to call. If no constructor is callable, a compile-time error occurs; otherwise the expression results in the creation of a new instance of
T using the chosen constructor. If there are no arguments, the parentheses may be omitted.
Where an instance is allocated depends on whether the instance is a class type or a value type. New instances of class types are created on the system heap, while new instances of value types are created directly on the stack.
ObjectCreationExpression ::= New TypeName [ ( [ ArgumentList ] ) ]