8.7.1 Constants
A constant is a class member that represents a constant value: a value that
can be computed at compile-time.
Constants are permitted to depend on other constants within the same
program as long as there are no
circular dependencies. The rules governing constant expressions are defined
in §14.15. The example
class Constants
{
public const int A = 1;
public const int B = A + 1;
}
shows a class named Constants that has two public constants.
Even though constants are considered static members, a constant declaration
neither requires nor allows the
modifier static. Constants can be accessed through the class, as in
using System;
class Test
{
static void Main() {
Console.WriteLine("{0}, {1}", Constants.A, Constants.B);
}
}
which prints out the values of Constants.A and Constants.B, respectively.
8.7.2 Fields
A field is a member that represents a variable associated with an object or
class. The example
class Color
{
internal ushort redPart;
internal ushort bluePart;
internal ushort greenPart;
public Color(ushort red, ushort blue, ushort green) {
redPart = red;
bluePart = blue;
greenPart = green;
}
public static Color Red = new Color(0xFF, 0, 0);
public static Color Blue = new Color(0, 0xFF, 0);
public static Color Green = new Color(0, 0, 0xFF);
public static Color White = new Color(0xFF, 0xFF, 0xFF);
}
shows a Color class that has internal instance fields named redPart,
bluePart, and greenPart, and
static fields named Red, Blue, Green, and White
The use of static fields in this manner is not ideal. The fields are
initialized at some point before they are
used, but after this initialization there is nothing to stop a client from
changing them. Such a modification
could cause unpredictable errors in other programs that use Color and
assume that the values do not
change. Readonly fields can be used to prevent such problems. Assignments
to a readonly field can only
occur as part of the declaration, or in an instance constructor or static
constructor in the same class. A static
readonly field can be assigned in a static constructor, and a non-static
readonly field can be assigned in an
instance constructor. Thus, the Color class can be enhanced by adding the
modifier readonly to the static
fields:
class Color
{
internal ushort redPart;
internal ushort bluePart;
internal ushort greenPart;
public Color(ushort red, ushort blue, ushort green) {
redPart = red;
bluePart = blue;
greenPart = green;
}
public static readonly Color Red = new Color(0xFF, 0, 0);
public static readonly Color Blue = new Color(0, 0xFF, 0);
public static readonly Color Green = new Color(0, 0, 0xFF);
public static readonly Color White = new Color(0xFF, 0xFF, 0xFF);
}
A constant is a class member that represents a constant value: a value that
can be computed at compile-time.
Constants are permitted to depend on other constants within the same
program as long as there are no
circular dependencies. The rules governing constant expressions are defined
in §14.15. The example
class Constants
{
public const int A = 1;
public const int B = A + 1;
}
shows a class named Constants that has two public constants.
Even though constants are considered static members, a constant declaration
neither requires nor allows the
modifier static. Constants can be accessed through the class, as in
using System;
class Test
{
static void Main() {
Console.WriteLine("{0}, {1}", Constants.A, Constants.B);
}
}
which prints out the values of Constants.A and Constants.B, respectively.
8.7.2 Fields
A field is a member that represents a variable associated with an object or
class. The example
class Color
{
internal ushort redPart;
internal ushort bluePart;
internal ushort greenPart;
public Color(ushort red, ushort blue, ushort green) {
redPart = red;
bluePart = blue;
greenPart = green;
}
public static Color Red = new Color(0xFF, 0, 0);
public static Color Blue = new Color(0, 0xFF, 0);
public static Color Green = new Color(0, 0, 0xFF);
public static Color White = new Color(0xFF, 0xFF, 0xFF);
}
shows a Color class that has internal instance fields named redPart,
bluePart, and greenPart, and
static fields named Red, Blue, Green, and White
The use of static fields in this manner is not ideal. The fields are
initialized at some point before they are
used, but after this initialization there is nothing to stop a client from
changing them. Such a modification
could cause unpredictable errors in other programs that use Color and
assume that the values do not
change. Readonly fields can be used to prevent such problems. Assignments
to a readonly field can only
occur as part of the declaration, or in an instance constructor or static
constructor in the same class. A static
readonly field can be assigned in a static constructor, and a non-static
readonly field can be assigned in an
instance constructor. Thus, the Color class can be enhanced by adding the
modifier readonly to the static
fields:
class Color
{
internal ushort redPart;
internal ushort bluePart;
internal ushort greenPart;
public Color(ushort red, ushort blue, ushort green) {
redPart = red;
bluePart = blue;
greenPart = green;
}
public static readonly Color Red = new Color(0xFF, 0, 0);
public static readonly Color Blue = new Color(0, 0xFF, 0);
public static readonly Color Green = new Color(0, 0, 0xFF);
public static readonly Color White = new Color(0xFF, 0xFF, 0xFF);
}
博客介绍了类中的常量和字段。常量是类成员,代表编译时可计算的常数值,可依赖同一程序内无循环依赖的其他常量。字段是与对象或类关联的变量,使用静态字段有被修改风险,可通过只读字段避免,只读字段赋值有特定规则。
668

被折叠的 条评论
为什么被折叠?



