Const是常量

Const在编译时会被编译为静态成员,它确定于编译时期,属类型级,通过类型来访问。

现在通过以下几种情况来说明const常量:

(1)初始化

public const string _name;

这种方式是错误的,因为它的值须在编译时期确定,所以在声明要初始化。

(2)构造器中初始化

public const string _name= "宋江";

public ConstReadonly()

{

_name = "吴用";

}

会有异常。

·为const在字面上理解就是常量,而对于赋值来说,左边不能是常量

·构造器初始化是在运行时期,而常量是确定于编译时期

(3)局部应用

做为局部常量使用。在方法Hello中:

public string Hello()

{

const string _returnStr = "常量";

return _returnStr;

}

(4)用于引用类型

const只用于值类型和字串类型。如果是引用类型如:

public const object _object = new object();

会有异常:只能用null对引用类型进行初始化(字串除外)。

public const object _object = null;

因为new是运行时,而const是编译时。

Readonly

只读变量,也从以下几方面来说明:

(1)初始化

public readonly int _age;//=22;

public readonly int _age=22;

两种都可以。

如果在声明时不进行初始化,将赋值默认值。

(2)构造器

在构造器中修改。

public readonly int _age=22;

public ConstReadonly()

{

_age = 10;

}

测试:

ConstReadonly cc = new ConstReadonly();

Assert.AreEqual(10, cc._age);

而在构造器外和声明时初始化时,不能对只读变量赋值。

(3)局部应用

不能定义局部变量。

Static readonly

静态只读变量

(1)初始化

public static readonly string _password="123456";

在声明时可以初始化也可以不初始化。

(2)构造器

static ConstReadonly()

{

_password = "123";

}

可以在静态构造器中进行初始化或赋值。(静态构造器是不带访问修饰符,同时不能带参数。)

(3)局部应用

不可以做为局部变量使用。

在IL中:

·Const定义为:static literal

·readonly为private initonly

·static readonly 定义为static initonly

总结:

1》  const是静态的,由类型访问,不能与static同用;readonly不是静态的,由对象来访问,可以与static一起使用

2》  const须在声明时初始化,readonly可以在声明时初始化,也可以在构造器中初始化。如果是static readonly,可以在静态构造器中初始化。

3》  const可以定义字段和局部常量,readonly只能是字段

4》  const中用于值类型和字串,引用类型初始化为null

总之,常量是常量,变量不管是只读的,还是一般的还是静态的,它总归是变量。

const,readonly 常量与只读的更多相关文章

  1. const与readonly常量

    const与readonly常量 const与readonly都是用来定义常量,但是它们有什么区别呢? 下面我们来简要的说明一下: const修饰的常量是编译时常量,如:public const St ...

  2. .net学习之类与对象、new关键字、构造函数、常量和只读变量、枚举、结构、垃圾回收、静态成员、静态类等

    1.类与对象的关系类是对一类事务的统称,是抽象的,不能拿来直接使用,比如汽车,没有具体指哪一辆汽车对象是一个具体存在的,看的见,摸得着的,可以拿来直接使用,比如我家的那辆刚刚买的新汽车,就是具体的对象 ...

  3. 为什么很多人使用#define而不是const定义常量

    众所周知,C语言一开始只有#define,C程序员用#define定义符号常量.但后来ANSI C加入了const限定符,而const应该比#define更好,为什么现在的C程序员还在大量使用#def ...

  4. const readonly

    静态常量(compile-time constants)静态常量是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值. 动态常量(runtime constants)而动态常量的值则 ...

  5. CSharp初级篇 1-4 this、索引器、静态、常量以及只读

    .NET Core CSharp初级篇 1-4 本节内容为this.索引器.静态.常量以及只读 简介 在之前的课程中,我们谈论过了静态函数和字段的一小部分知识,本节内容中,我们将详细的讲解关于对象操作 ...

  6. [BS-00] const限定常量或者变量(初次赋值后),其值不允许被改变

    CONST(C中的CONST) const是一个C语言(ANSI C)的关键字,它限定一个变量不允许被改变,产生静态作用.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人代码的 ...

  7. JS 使用const声明常量的本质(很多人都有误解)

    在我们使用const声明常量时,总认为值一旦声明就不可改变,其实是有误解的: 刚在看ES6标准文档时,仔细阅读了const的解析,恍然大悟的感觉,分享给大家. 本质 const实际上保证的,并不是变量 ...

  8. 指针与 const --- 指针常量与常量指针

    注:该文主要来源于 网易公开课之<C++ 程序设计入门(上)>课件. 在 C 语言标准中,const 修饰的变量称之为 只读变量, 在 C++ 语言标准中,const 修饰的变量称之为 常 ...

  9. C中const 定义常量的使用

    先看如下代码 #include <stdio.h> #include <string.h> #define ARRSIZE(a) (sizeof(a)/sizeof(a[0]) ...

随机推荐

  1. 企业级Java应用最重要的4个性能指标

    应用性能管理(APM)是一种即时监控以实现对应用程序性能管理和故障管理的系统化解决方案.目前主要指对企业的关键业务应用进行监测.优化,最终达到提高企业应用的可靠性和质量,保证用户得到良好的服务,降低I ...

  2. 2014多校第四场1006 || HDU 4902 Nice boat (线段树 区间更新)

    题目链接 题意 : 给你n个初值,然后进行两种操作,第一种操作是将(L,R)这一区间上所有的数变成x,第二种操作是将(L,R)这一区间上所有大于x的数a[i]变成gcd(x,a[i]).输出最后n个数 ...

  3. 一、Android NDK编程预备之Java jni简介

    转自:  http://www.eoeandroid.com/thread-264384-1-1.html 游戏开发 视频教程 博客 淘帖     论坛›eoe·Android应用开发区›Androi ...

  4. UVA 11401 - Triangle CountingTriangle Counting 数学

    You are given n rods of length 1,2, . . . , n. You have to pick any 3 of them and build a triangle. ...

  5. java获取系统当前时间

    SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");//设置日期格式 System.out.print(df. ...

  6. linux下tigervnc-servere服务的安装与使用

    关于tigervnc-servere的安装,可以直接使用本地yum源进行安装. [root@ ~]# yum install tigervnc-server -y 其中tigervnc的主要配置文件位 ...

  7. 模拟+思维 HDOJ 5319 Painter

    题目传送门 /* 题意:刷墙,斜45度刷红色或蓝色,相交的成绿色,每次刷的是连续的一段,知道最终结果,问最少刷几次 模拟+思维:模拟能做,网上有更巧妙地做法,只要前一个不是一样的必然要刷一次,保证是最 ...

  8. 基于Mongodb的轻量级领域驱动框架(序)

    混园子也有些年头了,从各个大牛那儿学了很多东西.技术这东西和中国的料理一样,其中技巧和经验,代代相传(这不是舌尖上的中国广告).转身回头一望,几年来自己也积累了一些东西,五花八门涉猎到各种方向,今日开 ...

  9. 网络安装之Redhat衍生版

    GNU/Linux开源,这个意义实在是非常的广泛,目前在distrowatch上表现活跃的300个发行版代表了GNU/Linux的主流,然而细心的Linux爱好者会发现CentOS-based dis ...

  10. Hadoop基础教程之高级编程

    从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成<key, value>. 2 ...