C# 封装数据 详解
除了签名讲过的几种特殊封装方式,还有两种字段修饰符:const(声明局部变量时见过)和readonly。
1.1 const(常量字段)
常量字段是不可更改的值,在编译时就已经确定,并且在整个程序运行期间保持不变。
设计规范:
(1)要为永远不变的值使用常量字段;
(2)不要为将来会发生变化的值使用常量字段。
例子:
public static class MathConstants
{
// 数学常量 π
public const double Pi = 3.14159;
// 自然对数的底 e
public const double E = 2.71828;
}
// 使用MathConstants类中的常量字段
class Program
{
static void Main(string[] args)
{
double radius = 5;
double area = MathConstants.Pi * radius * radius;
Console.WriteLine($"Circle Area (radius=5): {area}"); // 输出: Circle Area (radius=5): 78.53975
double exponential = Math.Pow(MathConstants.E, 2);
Console.WriteLine($"Exponential of e^2: {exponential}"); // 输出: Exponential of e^2: 7.38905609893065
}
}
1.2readonly
readonly修饰符只能用于字段(不能用于局部变量),它指出字段值只能从构造函数中更改,或在声明通过初始化器指定。
readonly
字段可以在声明时或在构造函数中初始化,并且其值在对象创建后不能被修改(只读)。
例子:
public class MyClass
{
// 在声明时初始化
public readonly int MaxValue = 100;
// 在构造函数中初始化
public readonly string Name;
public MyClass(string name)
{
Name = name;
}
}
虽然const
和readonly
都可以用来定义不可变的字段,但它们有一些重要的区别:
特性 | const | readonly |
---|---|---|
初始化时机 | 必须在声明时初始化 | 可以在声明时或构造函数中初始化 |
编译时常量 | 是 | 否 |
作用范围 | 编译时常量,值会在使用的地方直接替换 | 运行时常量,值在对象创建时确定 |
适用类型 | 只能是基本数据类型、枚举类型或null | 可以是任何类型 |