new операция используется для создания объектов и передачи управления конструкторам, например:
Class1 myVal = new Class1(); // Объект ссылочного типа. Создаётся в куче.
new также используется для обращения к конструкторам типа-значений (размерного типа), например:
int myInt = new int(); // Объект типа int размещается в стеке!
При определении объекта myInt ему было присвоено начальное значение 0, которое является значением по умолчанию для типа int. Следующий оператор имеет тот же самый эффект:
int myInt = 0; // Для размерного типа аналогично.
Конструктор БЕЗ ПАРАМЕТРОВ (конструктор умолчания) обеспечивает инициализацию переменной предопределённым значением. Со списком предопределённых значений, которыми инициализируются объекты предопределённых типов, можно ознакомиться в Default Values Table.
У структуры конструктор умолчания (конструктор без параметров) НЕ ПЕРЕОПРЕДЕЛЯЕТСЯ! Для них объявляются только параметризованные конструкторы.
А вот для предопределённых типов конструкторов с параметрами в принципе нет!
int q = new int();
//int q = new int(125); // Такого нет.
Сколько может иметь конструкторов структура. При использовании правил перегрузки – неограниченное количество.
Сколько может иметь конструкторов класс. Всегда на один больше, чем структура.
В следующем примере, создаются с использованием операции new и конструктора объекты-представители класса и структуры. Для инициализации полей-членов класса используются параметры конструкторов. Присвоение значений осуществляется в теле конструктора с использованием операций присвоения.
// cs_operator_new.cs
// The new operator
using System;
class NewTest
{
struct MyStruct
{
public int x;
public int y;
public MyStruct (int x, int y)
{
this.x = x;
this.y = y;
}
}
class MyClass
{
public string name;
public int id;
public MyClass ()
{
}
public MyClass (int id, string name)
{
this.id = id;
this.name = name;
}
}
public static void Main()
{
// Create objects using default constructors:
MyStruct Location1 = new MyStruct();
MyClass Employee1 = new MyClass();
// 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::
MyStruct Location2 = new MyStruct(10, 20);
MyClass Employee2 = new MyClass(1234, “John Martin Smith”);