# Calling .NET Constructors

.NET class constructors are called by using the function named `new()`. If there are several constructors, then again the system tries to find the one that is the best fit, according to the types of the supplied arguments. The result of calling `new()` is an XPath value whose type is denoted by a QName whose local name is the actual .NET class (for example `System.Data.SqlClient.SqlConnection` or `System.Collections.ArrayList`) and whose namespace URI is `http://saxon.sf.net/clitype`. The only things that can be done with a wrapped .NET Object are to assign it to a variable, to pass it to an extension function, and to convert it to a string or boolean, using the rules given below.

The use of external object types in namespace `http://saxon.sf.net/clitype` reflects the .NET type hierarchy. For example, if a variable is declared to accept a type of `net:System.Collections.IList`, then a value of type `net:System.Collections.ArrayList` will be accepted, but a value of type `net:System.Collections.HashTable` will not.

Next