C# 常量 const readonly与static readonly用法与区别
const 静态常量
readonly 动态常量
// A code block
public class ConstClass
{
private readonly int A = 32;
private const int B = 33;
public readonly int C = 34;
public static readonly int D;
//以下
public static const int B = 33;
public ConstClass()
{
}
//加上static 关键字,可以在声明变量时声明,也可以在以下静态构造中声明
static ConstClass()
{
D = 35;
}
public static void Main(string[] args)
{
//静态方法使用非静态类的方法和属性,可以先实例化类,再使用类的对象、属性和方法
var p = new ConstClass();
p.ConstTest();
}
public void ConstTest()
{
Console.WriteLine(B);
Console.WriteLine(C);
Console.WriteLine(A);
}
}
class TestClass
{
public void ConstTest()
{
var constClass = new ConstClass();
Console.WriteLine(constClass.C);
//以下代码编译错误,提示:无法使用实例引用来访问成员,请改用类型名来限定它
Console.WriteLine(constClass.D);
//使用以下方式可以访问
Console.WriteLine(ConstClass.D);
}
}
通过以上demo可以发现,
-
readonly 的对象可以通过类的实例化来访问,但是如果加上static, static readonly 的访问只能通过类名来访问,
-
使用static 关键字变量,会先分配内存, 访问时不需要new 类对象
-
const 需要先赋初值, readonly 可以先声明,再复制
-
const 的执行效率高, 但readonly更灵活