Unity экземпляры класса и ссылки на объекты

158
16 июля 2018, 20:00

Возник один вопрос по игровому движку Unity. Допустим я хочу создать экземпляр класса Camera.

Camera cam = New Camera();

Но в некоторых справках и уроках люди просто пишут:

Camera cam;

Поиск по интернету вывел меня на официальную документацию, где написано:

you can create an object reference without creating an object at all: Customer object2;

То есть получается, что во втором случае я создаю ссылку на объект Camera, а не экземпляр класса. Если рассуждение верно, то я могу создать две ссылки на один объект, допустим:

Camera Testcam1;
Camera Testcam2;

И если я присвою одной ссылке значение, то вторая тоже должна изменится так, как они ссылаются на один объект. Но этого не происходит.

Testcam1 = Camera.main;
Debug.Log(Testcam2);
Debug.Log(Testcam1);

В консоль выводится сообщение что Testcam2 имеет Null, а Testcam1 получает значение камеры. Возможно, я тоже должен что-то присвоить второй ссылке, прежде чем у неё появится значение. Но в любом случае, прошу помощи разъяснить мне, является такая вещь как Camera Testcam1; - ссылкой на объект, либо чем то еще.

Answer 1

Вы абсолютно верно рассуждаете до этого момента

И если я присвою одной ссылке значение, то вторая тоже должна изменится так, как они ссылаются на один объект. Но этого не происходит.

Рассмотрим ситуацию

Camera Testcam1;
Camera Testcam2;

в данный момент обе ссылки пустые - null.

Если мы присвоем одной пустой ссылке, другую пустую ссылку и после этого изменим значений в одной из них:

Testcam1 = Testcam2;
Testcam2 = camera.Main;
 //Testcam1 будет  nul
 //Testcam2 будет camera.Main

Testcam1 указывает на экземпляр класса, а Testcam2 продолжает быть пустой. Это связано с тем что хоть они оба и были null, это не было ссылкой на общий объект.

НО

Если после этого повторим:

 Testcam1 = Testcam2;
   //Testcam1 будет camera.Main
   //Testcam2 будет тот же объект что и Testcam2
Answer 2

Объявление вида

Тип имя_переменной;  

создает нулевую ссылку для ссылочных типов (классов) или переменную со значением по умолчанию для типов значений (структур), если является полем класса, иначе - неинициализированное значение.

READ ALSO
С# передача файла в теле POST запроса

С# передача файла в теле POST запроса

Возникла задача отправлять email напрямую из программыПо мимо просто текста прикреплять файл лога к письму

145
C# System.IO unauthorizedaccessexception

C# System.IO unauthorizedaccessexception

Делаю поиск файла на всех дисках доступных на компе:

167
Как сделать бэкап из .bak файла?

Как сделать бэкап из .bak файла?

Как выгрузить данные из databasebak в базу данных? Иcпользую ASP

187