一:常量与变量
——变量:是指在程序的运行过程中随时可以发生变化的量
——常量:可以当做常规的变量,只是他们的值在定义后不能再被修改,常量可以是任何的基本数据类型,比如整型,浮点型,字符串型,Class等
二:两种写法
——静态常量(const)
using UnityEngine;
public class Test : MonoBehaviour
{
public const float PI = 3.1415f;
public const string tag="Player";
}
——动态常量(readonly),又称为只读变量
using System;
public class Test
{
private readonly float PI = 2.5f;
public Test()
{
PI = 3.14f;
}
}
三:静态常量与动态常量的区别
——const声明的同时必须要赋值
readonly声明的时候可以赋值也可以不赋值,也可以在类的构造函数中进行赋值(如果是静态动态常量static readonly则可以在静态构造函数中初始化)
——const只能声明不用new初始化的值类型(int,double),所以数组、结构体类型不能声明为const,但是string可以,因为.net框架内部对string进行了特殊处理,使string具有恒定性,使它是只读的
readonly可以声明任何一个类型
——const是隐式static,它默认就是static,所以不能使用static关键字
readonly是显式static,可以声明static也可以不声明static
所以const声明的常量只能通过类去访问,readonly声明的常量访问方式需要看是否有static关键字
——const(静态常量compile-time constants)是编译时确定的,当程序编译时将所有引用const常量的地方替换为声明常量时的数值,类似于C中的#define宏(例如定义一个const int a=10,int b=20,在一个方法中使用a*b等同于10*b)
readonly(动态常量runtime constants)是在运行时才获取常量的值,并赋值到每个引用的位置
——const可以声明类中的字段或函数体内的局部变量,readonly只可以声明类中的字段
——const声明的常量不需要分配内存,无内存开销,且在内存中无存储位置,但是限制多,不灵活
readonly声明的常量灵活,但是性能略低,动态分配内存,有内存开销,且在内存在有存储位置