1.类和结构有以下几个基本的不同点:
- 类是引用类型,结构是值类型。
- 结构不支持继承。
- 结构不能声明默认的构造函数。
不允许显式的无参构造函数,允许显示的有参构造器
- 结构体中声明的字段无法赋予初值,类可以
- 类的对象是存储在堆空间中,结构存储在栈中。
.Net下的栈(Stack)和托管堆(Heap)(简称堆)
- 值类型只需要一段单独的内存,用于存储实际的数据(单独定义的时候放在栈中)。
- 引用类型需要两段内存。
- 第一段存储实际的数据,它总是位于堆中。
- 第二段是一个引用,指向数据在堆中的存放位置。
值类型与引用类型的区别
值类型与引用类型都继承自Systerm.Object类。不同之处,几乎所有的引用类型都是直接从Systerm.Object继承,而值类型则是继承Systerm.Object的子类Systerm.ValueType类。
我们在给引用类型的变量赋值的时候,其实只是赋值了对象的引用;而给值类型变量赋值的时候是创建了一个副本(说通俗点,就是克隆了一个变量)。
public class Lesson : MonoBehaviour
{
void Start()
{
Student_01 stu1=new Student_01("1号");
Student_01 stu11=stu1;
stu1.name = "11号";
Debug.LogError(stu11.name);
Debug.LogError(stu1.name); //类是引用类型,给引用类型的变量赋值的时候,其实只是赋值了对象的引用。 stu1和stu11都是对同一块堆地址的引用;
Student_02 stu2 = new Student_02("2号");
Student_02 stu22 = stu2;
stu22.name = "22号";
Debug.LogError(stu22.name);
Debug.LogError(stu2.name); //struct是值类型,给值类型变量赋值的时候是创建了一个副本(说通俗点,就是克隆了一个变量)。
}
}
public class Student_01
{
public Student_01(string str){ name = str; }
public string name;
}
public struct Student_02
{
public Student_02(string str) { name = str; }
public string name;
}
2024-01-14