1.0:常量

常量被关键字const 所修饰 我们来看看常量的demo

 class Program
    {
        static void Main(string[] args)
        {

            const string name = "soaeon";
            Console.WriteLine(name);
            Console.ReadKey();
        }
    }

下面我们看看该demo的反编译结果

哈哈  关于反编译的结果  我们可以看到 定义的  const string  name="soaeon";   不见了。 而在我们的 console.WriteLine("soaeon") 直接用比变量值给取代了   从这里 你发现了什么呢?

 static void Main(string[] args)
        {

            const string name = "soaeon";
            Console.WriteLine(name);
            Console.ReadKey();

            /* 1. 常量: 被const修饰的数据叫做常量.
             *    常量的值1旦声明,就无法更改.
             *
             * 2. 为什么常量的无法改变?
             *    经过反编译,我们发现声明常量的那句话不见了.
             *    在使用常量的地方 直接用常量的值 代替了.
             *    就算可以改也没有任何意义.
             *
             * 3. 声明常量的时候
             *    a. 常量声明的同时必须要赋值.
             *    b. 常量的值要求在编译的时候就可以确定.
             *
             *    在编译的时候,编译器无法知道变量的值. 只有在运行起来的时候才知道.
             *
             * 4. 常量可以是局部的,也可以使成员的.
             *    当常量作为成员变量的时候, 通过类名直接点出来访问.而不是通过对象名,
             *
             * 5. 什么时候我们可以定义常量
             *    如果有1个数据在整个程序的运行期间都不会发生变化.
             *    那么这个时候我们可把这个数据定义为常量以提高程序的运行效率.
             */
        }

2.0readonly 只读字段

我们看看 radonly的相关demo

class Person
    {
        public readonly string name = "jack";
        public int age;
        public bool gender;

        public Person(string name)
        {
            this.name = name;
        }

    }

有木有发下  readonly 虽然意为 只读  但是我们惊奇的发现   被关键字readonly修饰的字段可以在构造函数中修改  没错   你没看见   这也是被readonly修饰的字段唯一可以重新赋值的地方

3.0 const 和readonly的区别

const的值 必须要在编译的时候就确定下来   从上面的反编译中可以看出 编译之后 在要使用的位置其实已经使用常量的值给代替了

readonly  是要运行的时候    在构造函数中确定  所以唯一能重新赋值的地方是在构造函数中

c#基础--常量(const),只读字段(readonly)的更多相关文章

  1. php基础-----常量const和define的区别

    1.常量是一个简单的标识符,在脚本运行期间,值不可改变,默认大小写敏感. 答:使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比def ...

  2. 只读字段(readonly)和常量(const)

    1.常量 一个包含不能修改的值的变量,通过const关键字定义.只能在声明的同时赋值 2.只读字段 通过readonly关键字定义. 可以在声明的同时赋值. 对于实例字段,在包含字段声明的类的实例构造 ...

  3. const,readonly 常量与只读

    Const是常量 Const在编译时会被编译为静态成员,它确定于编译时期,属类型级,通过类型来访问. 现在通过以下几种情况来说明const常量: (1)初始化 public const string  ...

  4. 常量(const)和只读变量(readonly)

    //const修饰的数据叫做 常量 //常量一旦声明常量的值就不能改变. //常量在声明的时候 必须要赋初始值 //C#编译器在编译的时候 声明常量的那句话不见了. //在使用常量的地方就用常量的值代 ...

  5. 1.2 - C#语言习惯 - 用运行时常量readonly而不是编译期常量const

    C#中有两种类型的常量:编译期常量和运行时常量.二者有着截然不同的行为,使用不当将会带来性能上或正确性上的问题. 这两个问题最好都不要发生,不过若难以同时避免的话,那么一个略微慢一些但能保证正确的程序 ...

  6. 破解C#的readonly只读字段

    破解C#的readonly只读字段 目录 请允许我再唠叨几句const和readonly 修改readonly字段: 计策1:反间计 -- 反射修改 计策2:借刀杀人--调节字段偏移位置的结构体来修改 ...

  7. c#只读字段和常量的区别,以及静态构造函数的使用 .

    using System;using System.Collections.Generic;using System.Linq;using System.Text; namespace Console ...

  8. C#中的静态常量(const)和动态常量(static和readonly)用法和区别

    C#中有两种常量类型,分别为readonly(运行时常量)与const(编译时常量),本文将就这两种类型的不同特性进行比较并说明各自的适用场景.工作原理 readonly为运行时常量,程序运行时进行赋 ...

  9. c#学习系列之字段(静态,常量,只读)

    C#静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问不带有 static 修饰符声明的变量称做非静态变量.static变量在对象被实例化时创建,通过对象进行访问一个类的所 ...

随机推荐

  1. FZU 2129 子序列个数 (递推dp)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2129 dp[i]表示前i个数的子序列个数 当a[i]在i以前出现过,dp[i] = dp[i - 1]*2 - ...

  2. 将nginx配置为服务,php-fpm配置说明

    编写shell脚本 vi /etc/init.d/nginx #!/bin/bash # # Startup script for the PHP-FPM server. # # chkconfig: ...

  3. oracle 学习笔记--用户管理

    oracle 用户管理 创建用户(需要具有dba权限的用户) create user 用户名 identified by 密码 defaule tablespace users     //默认表空间 ...

  4. IOS开发之路四(UITabBarController)

    前两天看了看斯坦福大学的iphone开发公开课,讲的倒是不错,可看的我云里雾里的,不怎么讲基础和原理,不太适合初学者.今天看了一上午ios5基础教程这本书感觉有点头绪了....废话少说,讲一讲我上午做 ...

  5. IE自动化 二(判断IP所在地)

    该脚本用来访问一个url,并取出相应结果(该脚本用来通过淘宝API实现判断一个IP所在地) #定义要访问的URL $url="http://ip.taobao.com/service/get ...

  6. 【机试题】c# 是否是素数,找出比它大的第一个素数

    题目: 输入一个自然数 判断是否是素数,是素数则提示是素数,否则找出比它大的第一个素数 代码: Console.WriteLine("请输入任意一个自然数."); string n ...

  7. [Jobdu] 题目1527:首尾相连数组的最大子数组和

    题目描述: 给定一个由N个整数元素组成的数组arr,数组中有正数也有负数,这个数组不是一般的数组,其首尾是相连的.数组中一个或多个连续元素可以组成一个子数组,其中存在这样的子数组arr[i],…arr ...

  8. 关于ORACLE DUAL表

    1.DUAL表的用途 Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中--查看当前连接用户 SQL> select user from d ...

  9. GLSL实现Image Filter 【转】

    http://blog.csdn.net/a3070173/archive/2008/11/27/3390477.aspx 图像过滤无论是在作图工具还是特效的实现上都时有运用,这里发一些通常会使用到的 ...

  10. openldap 安装 配置 使用

    1.安装 #安装 yum install -y openldap-servers openldap-clients openldap-devel 2.复制配置文件 #复制配置文件 cp /usr/sh ...