`
lovnet
  • 浏览: 6722276 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

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;

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

}

}

分享到:
评论

相关推荐

    C#中const 和 readonly 修饰符的用法详解

    1. 只有C#内置类型(int,double,long等)可以声明为const;结果、类和数组不能声明为const。 2. readonly 是在字段上使用的修饰符,直接以类名.字段访问。 3. const 必须在申明中初始化。之后不能再修改。 4. ...

    C#程序设计-3期(KC008) KC008110100018-怎样区别const, static和readonly?.docx

    C#程序设计-3期(KC008) KC008110100018-怎样区别const, static和readonly?.docx 学习资料 复习资料 教学资源

    C#基础:基于const与readonly的深入研究

    •readonly和const都是用来标识常量的[1]。•const可用于修饰class的field或者一个局部变量(local variable);而readonly仅仅用于修饰class的field。•const常量的值必定在编译时就已明确并且恒定的;而readonly...

    C# 定义常量 两种实现方法

    前者用“const”来定义,后者用“readonly”来定义。 对于静态常量(Compile-time constant),它的书写方式如下: public const int MAX_VALUE = 10; 为什么称它为静态常量呢,因为如上声明可以按照如下理解(注意...

    c#基础学习问答c#基础学习问答

    2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的? 7.override 和 overload 的区别? 8.什么是索引指示器? 9.new ...

    C#25个问题 静态成员和非静态成员的区别等等

    2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的? 7.override 和 overload 的区别? 8.什么是索引指示器? 9.new ...

    你必须知道的C#的25个基础概念(附源码)

    2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的? 7.override 和 overload 的区别? 8.什么是索引指示器? 9.new ...

    C#基础概念.doc

    2、const 和 static readonly 区别? 3、extern 是什么意思? 4、abstract 是什么意思? 5、internal 修饰符起什么作用? 6、sealed 修饰符是干什么的? 7、override 和 overload 的区别? 9、new 修饰符是起什么...

    Effective C# (Covers C# 4.0) Mar 2010

    Item 2: Prefer readonly to const 8 Item 3: Prefer the is or as Operators to Casts 12 Item 4: Use Conditional Attributes Instead of #if 20 Item 5: Always Provide ToString() 28 Item 6: Understand the ...

    在一小时内学会 C#(txt版本)

    readonly 和 const 数据成员不同之处在于 const 要求你在声明时进行直接初始化。看下面的例程: 复制内容到剪贴板 代码: class MyClass { const int constInt = 100; //直接进行 readonly int myInt = 5; //直接...

    C#中常量和只读变量的区别小结

    您可能感兴趣的文章:C#学习笔记整理_变量等基础语法(必看篇)C#把整个文件内容读入字符串变量的方法C#中static静态变量的用法实例C#不同类型的成员变量(字段)的默认值介绍C#类中属性与成员变量的使用小结C#中属性和...

    C#面向对象 基础概念25

    静态成员和非静态成员的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal 修饰符起什么作用?6.sealed 修饰符是干什么的?7.override 和 overload 的区别

    C#基础概念二十五问

    2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的? 7.override 和 overload 的区别? 8.什么是索引指示器? 9.new ...

    你必须知道的C#的25个基础概念

    2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的? 7.override 和 overload 的区别? 8.什么是索引指示器? ......

    调高C#编程的50个基本技巧

    在 readonly 和 const 之间,优先使用 readonly 3.在 as 和 强制类型转换之间,优先使用 as 操作符 4.使用条件属性 (Conditional Attributes) 来代替条件编译语句 #if 5.总是为自定义类重载 ToString 方法 6...

    C#的25个问题(内附代码示例)

    2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的? 7.override 和 overload 的区别? 8.什么是索引指示器? 9.new ...

    c#学习笔记.txt

    若要在一个用 @ 引起来的字符串中包括一个双引号,请使用两对双引号:@ 符号的另一种用法是使用碰巧成为 C# 关键字的被引用的 (/reference) 标识符。 8, 修饰符 修饰符作用 访问修饰符 public private internal ...

    你必须知道的C#的25个基础概念(附演示).pdf

    2.const 和 static readonly 区别? 3.extern 是什么意思? 4.abstract 是什么意思? 5.internal 修饰符起什么作用? 6.sealed 修饰符是干什么的? 7.override 和 overload 的区别? 8.什么是索引指示器? 9....

Global site tag (gtag.js) - Google Analytics