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