c#基础知识--常量(const),只读字段(readonly)

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  是要运行的时候    在构造函数中确定  所以唯一能重新赋值的地方是在构造函数中

时间: 2024-08-24 02:51:14

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

const基础知识、const在C++和C中的异同、const与#define宏定义的异同

1.const基础知识 (1)用const定义常量 const int a = 5;   //定义了一个int型常量a,其值为5 (注:在C++中将其存储在符号表中(key,value),并不分配内存空间,只有在取地址或者定义为全局变量在其他文件中使用时才分配内存空间) (2)const与指针 1 const int* p1 = &a; //p1是指向常量a的指针,a的值不能通过指针p1改变 2 3 int* const p2 =&b; //p2是只能指向b的指针,b的值可以通过p2改变

【C基础知识】const知识大全

[0]概述 const是constant 的缩写,是C语言的关键字之一,是一个类型修饰符(type specifier).const是恒定不变的意思也翻译为常量.常数等.很不幸,正是因为这一点,很多人都认为被 const 修饰的值是常量.这是不精确的,精确的说应该是只读的变量,其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容.或许当初这个关键字应该被替换为 readonly.那么这个关键字有什么用处和意义呢? 它限定变量为只读变量,即变量保存在只读静态存储区.编译时,如何尝试修改只读

C++基础知识---static const成员变量的初始化

为了将常量的作用域限制于class内,你必须让让成为class的一个成员:而为确保此常量之多只有一份实体,你必须让让成为一个static成员: Class Gameplayer { Private: Staticconst int Number = 5;  //常量声明式 Intscores[Number];  //使用该常量 }: 然而你所看到的是Number的声明式而非定义式.通常C++要求你对你所使用的任何东西提供一个定义式,但如果他是个class专属常量又是static且为整数类型,则需

c++ 基础知识 0001 const 知识

1. C++ const用法 尽可能使用const 2. C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的.如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助. 3. 3.1.const 修饰成员变量 #include<iostream>using namespace std;int main(){ int a1=3; ///non-const data const int a2=a1; ///const

常量数据与只读字段

常量数据 关键字:const 赋初值后不可改变 隐士静态,在类级别上直接引用 定义常量时,必须指定初始值,在编译时必须知道常量的值,因此,不能在构造函数中进行赋值 只读字段 关键字:readonly 与常量相同,赋初值后不可改变(其实是可以改变的) 与常量不同,不是隐士静态的,在对象级别引用 与常量不同,赋给只读字段的值可以在运行时确定,因此,在构造函数中作用域中进行赋值是合法的(其他地方不行) 1 namespace Test 2 { 3 class Program 4 { 5 static

C语言基础知识----易让人头疼的关键字----const &amp;&amp; typedef &amp;&amp; define

const关键字 const=read only,修饰的为只读变量而不是常量.const修饰的变量不能用作数组的维数也不能放在switch语句的case:之后. 主要作用有: 1.通过把不希望被修改的变量或参数用const来修饰,编译器会保护这些变量不被修改增强系统的可靠性: 2.增强代码的可读性 [html] view plaincopyprint? const int a;      //a为常量不能被修改 int const a;      //a为常量不能被修改 const int *a

java基础知识回顾之---java String final类 容易混淆的java String常量池内存分析

/** *   栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放  在常量池中). 堆(heap):存放所有new出来的对象. *   静态存储:存放静态成员(static定义的). 常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量和基本类型常量(float.int等).另外,可以存储不经常改变的东西 *                       p

ES6 基础知识-----简记 let const

ES5中只有函数作用域和全局作用域,声明变量使用var,在es6中添加声明变量 let const let 声明块级作用域变量, let 不存在变量提升 var命令会发生"变量提升"现象,即变量可以在声明之前使用,值为undefined.这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用. 为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错. var 声明的变量可以在声明之前使用,是undifind,存在变量提升现象,le

【Unity|C#】基础篇(6)——const、readonly、static readonly

[学习资料] <C#图解教程>(第6章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.com/s/1mhOmBG0 [内容] const readonly static readonly 三者比较 [笔记] const 编译时常量 类的常量 只能在声明时赋值 readonly 运行时常量 对象的常量 可以在 声明时 赋值(与常量一样),或 构造函数中 赋值 static readonly 运行时