Оператор new используется для создания новых экземпляров типов.
Существует три формы выражений new:
· Выражения создания объектов используются для создания новых экземпляров типов класса и типов значения.
· Выражения создания массивов используются для создания новых экземпляров типов массива.
· Выражения создания делегатов используются для создания новых экземпляров типа делегата.
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);
}
}
Если в определение структуры SampleStruct добавить конструктор экземпляра по умолчанию
public SampleStruct() { }
Это приведет к ошибке: Структуры не могут содержать явных конструкторов без параметров
Выражения создания объектов
Выражение_создания_объекта используется для создания нового экземпляра типа_класса или типа_значения.
выражение_создания_объекта: new тип ( список_аргументовнеобязательно ) инициализатор_объекта_или_коллекциинеобязательно new тип инициализатор_объекта_или_коллекции
Тип выражения_создания_объекта должен быть равен типу_класса, типу_значения или параметру_типа. Тип не может быть типом_класса abstract.
Во время выполнения обработка выражения_создания_объекта в виде new T(A), где T является типом_класса или типом_структуры, а A является необязательным списком_аргументов, включает следующие этапы.
· Если T является типом_класса:
o Создается новый экземпляр класса T.
o Все поля нового экземпляра инициализируются с помощью значений по умолчанию.
o В соответствии с правилами вызова функции-члена вызывается конструктор экземпляра. Ссылка на созданный экземпляр автоматически передается конструктору экземпляра, и к этому экземпляру можно обращаться из этого конструктора с помощью this.
· Если T является типом_структуры:
o С помощью выделения временной локальной переменной создается экземпляр типа T. Поскольку для явного присвоения значений каждому полю создаваемого экземпляра требуется конструктор экземпляра типа_структуры, инициализация временной переменной не требуется.
o В соответствии с правилами вызова функции-члена вызывается конструктор экземпляра. Ссылка на созданный экземпляр автоматически передается конструктору экземпляра, и к этому экземпляру можно обращаться из этого конструктора с помощью this.
Оператор typeof используется для получения объекта System.Type для типа.