C# static readonly const用法
const 常量
1.它可以用来修饰类的字段或局部变量.const修饰的变量只能是值类型,不能是引用类型.其实准确的说它也能修饰引用类型,只是引用类型只能为null,不能实例化.那这样的引用变量也等于没啥用处的啊.比如const int[] array = {1,2,3}是错的.不过const int[] array = null;是对的
2.在声明时要赋值,赋值以后不能再改.它修饰的变量的值是在编译的时候就确定了.const int a = 4; 是对的.const int b;没有赋值就错了啊.
3.它默认是static类型,那么它修饰的是类的字段的话则只能通过类直接引用,不能通过类的实例引用.也不能再用static来一起修饰变量
readonly
1.只能修饰类的字段,不能修饰局部变量
2.声明时赋值或者通过构造函数给赋值,其他地方不能赋值.
3.它修饰引用类型时有点特别的地方,它修饰的引用变量一当引用某个类型时就不能再引用其他类型,但是引用的类型里面的内容可以修改
比如readonlyint [] array = {1,2,3};我们不能再在其他地方来个array = new[]{4,5,6,7};了这样会出错,但我们可以这样改数组里的值array[0] = 100;这是对的
static
1.可用来修饰类字段,函数,类.静态类里面所有的函数和字段必须都是静态的. 静态的字段和函数只能通过类直接引用,不能通过类的实例引用
2.静态构造函数,静态构造函数声明方式跟一般构造函数类似,只不能不能用任何修饰符.只能在前面加个static.静态构造函数里面只能初始化静态变量.
我们不用自己去调用静态构造函数,是系统默认调用的.当实例化一个类,或者使用为中的静态字段时会自动调用.而且调用一次后就不会再调用.
static readonly
这两个关键字可以组合使用.大部分时候和const达到的效果一样.但也有一些区别
1.const 必须声明时就赋值.static readonly可以先不赋值,在静态构造函数中再赋值.
2.const不能修饰引用类型.而且static readonly可以.例如static readonly ClassName name = new ClassName();是正确的.而此时用const修饰就是错的
3.由于const修饰的变量值是在编译时确定的,而且static readonly的值是在运行时确定的.所以相同的表达式值可能不一样
比如
public class
{
const int aa= bb + 10;
const int bb= 10;
staticreadonly int a = b + 10; //这会b还没赋值,默认为0.如果把b放到a 前面去结果就是20了
staticreadonly int b = 10;
public voidPrintSom()
{
console.writeline(aa);//20
console.writeline(bb);//10
console.writeline(a);//10
console.writeline(b);//10
}
}
摘自 聪明的笨蛋
补充:软件开发 , C# ,