Возьмите следующий код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MyClass
{
public int myNumber;
}
public class Test : MonoBehaviour
{
MyClass class1 = new MyClass();
MyClass class2 = new MyClass();
void Start()
{
class1.myNumber = 1;
class2 = class1;
class2.myNumber = 2;
Debug.Log(class1.myNumber); //output: 2 (I'd want it to output 1!!!)
}
}
Теперь, если я правильно понял, в C# классы являются ссылочным типом, а не типом значения, поэтому такое поведение желательно.
Однако, что мне нужно сделать, чтобы не сделать это так? Что я мог сделать, чтобы сделать нормальное присвоение значения, не "связывая" два класса вместе?
Я понимаю, что мог бы заменить строку 18 на это:
class2.myNumber = class1.myNumber;
И это будет делать то, что я хочу (так как я присваиваю тип значения, а не ссылочный тип), но это немного неудобно для моего случая ... в моем реальном сценарии класс имеет несколько подэлементов, которые мне нужно скопировать во многих разных местах.
Существует ли однострочный метод для копирования класса в новый, без привязки к нему ссылки на исходный, но путем создания нового независимого класса?