new, opérateur (Référence C#)
Mise à jour : novembre 2007
Utilisé pour créer des objets et appeler des constructeurs. Par exemple :
Class1 obj = new Class1();
Il est également utilisé pour créer des instances de types anonymes.
var query = from cust in customers
select new {Name = cust.Name, Address = cust.PrimaryAddress};
L'opérateur new est également utilisé pour appeler le constructeur par défaut des types valeur. Par exemple :
int i = new int();
Dans l'instruction précédente, i est initialisé sur la valeur 0, qui correspond à la valeur par défaut pour le type int. L'instruction produit le même résultat que ce qui suit :
int i = 0;
Pour obtenir une liste exhaustive des valeurs par défaut, consultez Tableau des valeurs par défaut (Référence C#).
N'oubliez pas que déclarer un constructeur par défaut pour un struct est une erreur, car chaque type valeur a implicitement un constructeur public par défaut. Il est possible de déclarer des constructeurs paramétrés sur un type struct pour définir ses valeurs initiales, mais cela est nécessaire uniquement si les valeurs autres que la valeur par défaut sont requises.
Les objets de type valeur tels que les structs sont créés sur la pile, tandis que les objets de type référence tels que les classes sont créés sur le tas. Les deux types d'objets sont détruits automatiquement, mais les objets basés sur les types valeur sont détruits lorsqu'ils sortent de portée, alors que les objets basés sur des types référence sont détruits à un moment non spécifié après la suppression de la dernière référence. Pour les types référence qui consomment des ressources fixes telles que de grandes quantités de mémoire, des handles de fichiers ou des connexions réseau, il est quelquefois préférable d'employer la finalisation déterministe pour s'assurer que l'objet est détruit dès que possible. Pour plus d'informations, consultez using, instruction (Référence C#).
L'opérateur new ne peut pas être surchargé.
Si l'opérateur new échoue lors de l'allocation de mémoire, il lève l'exception, OutOfMemoryException.
Exemple
Dans l'exemple suivant, un objet de struct et un objet de classe sont créés et initialisés à l'aide de l'opérateur new, puis des valeurs leur sont attribuées. Les valeurs par défaut et les valeurs attribuées sont affichées.
struct SampleStruct
{
public int x;
public int y;
public SampleStruct(int x, int y)
{
this.x = x;
this.y = y;
}
}
class SampleClass
{
public string name;
public int id;
public SampleClass() {}
public SampleClass(int id, string name)
{
this.id = id;
this.name = name;
}
}
class ProgramClass
{
static void Main()
{
// Create objects using default constructors:
SampleStruct Location1 = new SampleStruct();
SampleClass Employee1 = new SampleClass();
// Display values:
Console.WriteLine("Default values:");
Console.WriteLine(" Struct members: {0}, {1}",
Location1.x, Location1.y);
Console.WriteLine(" Class members: {0}, {1}",
Employee1.name, Employee1.id);
// Create objects using parameterized constructors:
SampleStruct Location2 = new SampleStruct(10, 20);
SampleClass Employee2 = new SampleClass(1234, "Luciana Ramos");
// Display values:
Console.WriteLine("Assigned values:");
Console.WriteLine(" Struct members: {0}, {1}",
Location2.x, Location2.y);
Console.WriteLine(" Class members: {0}, {1}",
Employee2.name, Employee2.id);
}
}
/*
Output:
Default values:
Struct members: 0, 0
Class members: , 0
Assigned values:
Struct members: 10, 20
Class members: Luciana Ramos, 1234
*/
Notez dans l'exemple que la valeur par défaut d'une chaîne est null. C'est pourquoi elle n'est pas affichée.
Spécification du langage C#
Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.
- 7.5.10 Opérateur new
Voir aussi
Concepts
Référence
Mots clés des opérateurs (Référence C#)
Types anonymes (Guide de programmation C#)