C#学习笔记——readonly修饰符、const成员常量、本地常量、常量与静态量
readonly修饰符
字段可以用readonly修饰符声明。其作用类似将字段声明为const,一旦设定不能改变。
readonly和const的区别:
- const只能在声明时初始化,而readonly可以在任意位置设置值。(字段声明语句类似const。类的任何构造函数。如果是static字段,初始化必须在静态构造函数中完成。)
- const字段的值必须在编译时决定,而readonly字段的值可以在运行时决定。
- const的行为总是静态的,而对于readonly字段以下两点是正确的:1它可以是实例字段,也可以是静态字段。2它在内存中有存储位置。
例:
class Shape
{
readonly double PI = 3.1416;
readonly int NumberOfSide;//边的数量
//矩形
public Shape(double side1, double side2)
{
NumberOfSide = 4;
}
//三角形
public Shape(double side1, double side2, double side3)
{
NumberOfSide = 3;
}
}
PI在声明时初始化。
NumberOfSide在构造函数中初始化。
成员常量
被声明在类中。声明时初始化。
class MyClass {
const int a = 1;
}
本地常量
本地常量一旦被初始化,它的值不能改变。
特征:
- 常量在声明时必须初始化。
- 常量在声明后不能改变。
常量的声明与字段或变量的声明相同,除了以下内容:
- 在类型前增加关键字const。
- 必须有结构化语句。
const Type Identifier = value;
例:
public void Display()
{
const double PI = 3.1415;
for (int i = 0; i <= 5; i++)
{
double area = i * i * PI;
Console.WriteLine("半径为{0}的圆,面积为{1}", i, area);
}
}
这个方法结束,这个常量失效
常量与静态量
与真正的静态量不同,常量没有自己的存储位置,而是在编译时被编译器替换。
using System;
namespace Test
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("PI = {0}", T.pi);
}
}
class T
{
public const double pi = 3.1415;
}
}
常量pi可以在类外使用