C#:那些不许被修改的只读量

常量:表示常量值的类的成员。

  • 常量表示的值能够在编译的时候计算出来用于代替常量名
  • 常量属于类型,而不属于实例。所以没有实例常量一说,想要表示"实例常量",我们可以用实例只读字段来表示
  • 我们还学过本地常量(局部常量),要和常量区分开

常量的用途有哪些?

  • 在类中声明常量来表示类型中的一些永远不会改变的数据,在我们想用的使用直接拿来使用。
//
// 摘要:
//     表示 32 位带符号整数。
[ComVisible(true)]
public struct Int32 : IComparable, IFormattable, IConvertible, IComparable<Int32>, IEquatable<Int32>
{
    //
    // 摘要:
    //     表示 System.Int32 的最大可能值。 此字段为常数。
    public const Int32 MaxValue = 2147483647;
    //
    // 摘要:
    //     表示 System.Int32 的最小可能值。 此字段为常数。
    public const Int32 MinValue = -2147483648;
}

上面摘自int类型的API,我们可以看到int类型能够表示的最大值是永远不会改变的,对于这样的数据我们正好就可以使用常量

  • 常量能够增加可读性和执行效率
//
// 摘要:
//     为三角函数、对数函数和其他通用数学函数提供常数和静态方法。
public static class Math
{
    //
    // 摘要:
    //     表示圆的周长与其直径的比值,由常数 π 指定。
    public const double PI = 3.1415926535897931;
}

对于圆周率Π来说,我们不希望在每一次使用到Π的值的时候,都写一遍3.14....;如果将3.14....声明成一个常量,那么以后在程序中使用到它的时候就会很方便。
另外,常量在编译的时候就会将常量后面的值拿出来代替常量名,它并不会像字段那样占用内存空间,所以使用常量要比定义那些只读字段效率要高很多。

常量的声明: 修饰符 const 类型 常量名(一般全部用大写英文字母) = 常量或常量表达式;

class Utility
{
    private const string SERVICEURL = "https://wwww.waxpy.com/upload/file";
}

各种"只读"的使用场景

  • 为了提高程序执行效率,在只读字段、只读属性、常量中,优先选择常量
  • 为了防止对象的数据被修改,使用只读字段
  • 为了向外暴露不允许修改的数据,使用只读属性(静态只读属性、实例只读属性)
  • 常量能表示各种值类型,但是不能声明称结构体或者引用类型;而使用静态只读字段就没有这点限制。
    静态只读解决常量短板

以上是对常量和只读量的总结,记录下来,以便以后查阅。

原文地址:https://www.cnblogs.com/bigbosscyb/p/13715663.html