C#当中的const没有C++中那么灵活,所能修饰的变量类型很有限。
主要有一下这几种:基本数据类型、字符串类型、同为const的变量
举例说明:
const float f=9;
const string s = "999";
const int i1 = 8;
const int i2 = i1+1;
1)const不仅可以修饰成员变量还可以修饰局部变量。
2)const的原理是在编译期直接对变量值进行替换的。
3)const修饰的变量不能再用static变量进行修饰,并且其只能在字段的声明中初始化
该部分主要参考自:
readonly关键字相较于const关键字就更灵活一些。
1)readonly没有对变量类型有修饰限制。但readonly修饰的关键字只能在声明期间或在同一个类的构造函数中向字段赋值。 可以在字段声明和构造函数中多次分配和重新分配只读字段,在其他时候则是无法赋值的。
举例说明:
public class ReadOnlyTest : MonoBehaviour
{
readonly int i = 0;//可在声明时赋值
readonly float f1;//也可不在声明时赋值
ReadOnlyTest()
{
i = 9;//在构造函数中可多次赋值
i = 8;
f1 = 2.2f;
}
}
2)readonly修饰值类型和引用类型。
public class RefType
{
public int i = 0;
}
public struct ValueType
{
public int i = 0;
public ValueType(int a)
{
i=a;
}
}
public class ReadOnlyTest : MonoBehaviour
{
readonly RefType refType = new RefType();
readonly ValueType valueType = new ValueType();
readonly ValueType1 valueType1 = new ValueType1();//报错
void Test()
{
refType.i = 9;//不报错
valueType.i = 2;//报错
}
}
可以看出readonly修饰的值类型,值类型的成员变量也将是readonly的,但是修饰引用类型时,其本质是一个常量指针,引用类型的成员变量是不受readonly修饰符约束的。
1)readonly修饰的变量是在运行时才进行赋值的。
2)readonly无法修饰一般的局部变量,目前经过测试,就知道ref跟readonly连在一块可以修饰。
3)readonly修饰的变量可以是static的
该部分参考自:
用readonly修饰struct时也有其他注意事项,可参考:
不过readonly是修饰不了class的。
因篇幅问题不能全部显示,请点此查看更多更全内容