C#中的常量

194 阅读2分钟

一:常量与变量

——变量:是指在程序的运行过程中随时可以发生变化的量
——常量:可以当做常规的变量,只是他们的值在定义后不能再被修改,常量可以是任何的基本数据类型,比如整型,浮点型,字符串型,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声明的常量灵活,但是性能略低,动态分配内存,有内存开销,且在内存在有存储位置