现在的位置: 首页 > 综合 > 正文

C# static readonly const用法

2013年09月13日 ⁄ 综合 ⁄ 共 1290字 ⁄ 字号 评论关闭

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;

static readonly int a = b + 10; //这会b还没赋值,默认为0.如果把b放到a 前面去结果就是20了

static readonly int b = 10;

public voidPrintSom()

{

console.writeline(aa);//20

console.writeline(bb);//10

console.writeline(a);//10

console.writeline(b);//10

}

}

 

抱歉!评论已关闭.