Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка для КР по ООП.doc
Скачиваний:
8
Добавлен:
18.04.2019
Размер:
2.47 Mб
Скачать

Операция new

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”);

// 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);

}

}

В управляемой памяти нет ничего, что бы создавалось без конструктора

Даже если его присутствие не обозначено явным образом.

string s = “qwerty”;

int[] intArray = {1,2,3,4,5};

Эти операторы являются всего лишь сокращённой формой следующих операторов определения:

string s = new string(new char[]{‘q’,’w’,’e’,’r’,’t’,’y’});

int[] intArray = new int[5]{1,2,3,4,5};