C# - 常量和字面量
常量指的是程序在执行期间不可更改的固定值。这些固定值也称为字面量。常量可以是任何基本数据类型,如 integer constant、floating constant、character constant 或 string literal。还有枚举常量。
常量在处理上与普通变量相同,只是定义后其值不可修改。
Integer Literals
Integer literal 可以是十进制或十六进制常量。前缀指定基数或进制:0x 或 0X 表示十六进制,十进制则无前缀。
Integer literal 还可以带有后缀,由 U 和 L 组合而成,分别表示 unsigned 和 long。后缀可以是大写或小写,且顺序任意。
示例
以下是一些 integer literals 的示例 −
212 /* 合法 */ 215u /* 合法 */ 0xFeeL /* 合法 */
以下是各种类型 Integer literals 的其他示例 −
85 /* 十进制 */ 0x4b /* 十六进制 */ 30 /* int */ 30u /* unsigned int */ 30l /* long */ 30ul /* unsigned long */
Floating-point Literals
Floating-point literal 包含整数部分、小数点、分数部分和指数部分。您可以用十进制形式或指数形式表示 floating point literals。
示例
以下是一些 floating-point literals 的示例 −
3.14159 /* 合法 */ 314159E-5F /* 合法 */ 510E /* 非法:指数不完整 */ 210f /* 非法:无小数点或指数 */ .e55 /* 非法:缺少整数或分数部分 */
在十进制形式表示时,必须包含小数点、指数,或两者兼有;在指数形式表示时,必须包含整数部分、分数部分,或两者兼有。带符号的指数由 e 或 E 引入。
Character Constants
Character literals 用单引号括起来。例如,'x' 可以存储在 char 类型的简单变量中。Character literal 可以是普通字符(如 'x')、转义序列(如 '\t')或通用字符(如 '\u02C0')。
C# 中某些字符前面加反斜杠时具有特殊含义,用于表示如换行符 (\n) 或制表符 (\t)。以下是一些此类转义序列代码的列表 −
| Escape sequence | 含义 |
|---|---|
| \\ | \ 字符 |
| \' | ' 字符 |
| \" | " 字符 |
| \? | ? 字符 |
| \a | 警报或铃声 |
| \b | 退格 |
| \f | 换页 |
| \n | 换行 |
| \r | 回车 |
| \t | 水平制表符 |
| \v | 垂直制表符 |
| \xhh . . . | 一个或多个十六进制数字 |
示例
以下示例展示了几个转义序列字符 −
using System;
namespace EscapeChar {
class Program {
static void Main(string[] args) {
Console.WriteLine("Hello\tWorld\n\n");
Console.ReadLine();
}
}
}
上述代码编译并执行后,将产生以下结果 −
Hello World
String Literals
String literals 或常量用双引号 "" 或 @"" 括起来。String 包含类似于 character literals 的字符:普通字符、转义序列和通用字符。
您可以使用 string literals 将长行拆分成多行,并用空白字符分隔各部分。
示例
以下是一些 string literals 的示例。这三种形式都是相同的字符串。
"hello, dear" "hello, \ dear" "hello, " "d" "ear" @"hello dear"
定义常量
常量使用 const 关键字定义。定义常量的语法为 −
const <data_type> <constant_name> = value;
访问常量
您可以使用其名称访问常量,前提是它在作用域内。
以下是在 C# 中访问常量的语法:
//When constant is in local scope constant_name //When constant is in a class class_name.constant_name
类常量
类常量使用 const 关键字在类内部声明。它们是隐式 static 的,这意味着它们属于类而不是实例。
类常量可以使用类名访问。
语法
您可以使用以下语法定义类常量:
class ClassName
{
public const datatype ConstantName = value;
}
示例
在以下示例中,我们定义了一个名为 MathConstants 的类,其中包含两个类常量 Pi 和 SpeedOfLight:
using System;
class MathConstants
{
public const double Pi = 3.14159;
public const int SpeedOfLight = 299792458;
}
class Program
{
static void Main()
{
Console.WriteLine("Value of Pi: " + MathConstants.Pi);
Console.WriteLine("Speed of Light: " + MathConstants.SpeedOfLight);
}
}
上述代码编译并执行后,将产生以下结果 −
Value of Pi: 3.14159 Speed of Light: 299792458
更多关于常量和字面量的示例
以下是在 C# 中声明和访问不同类型常量和字面量的示例:
示例 1
以下程序演示了在 C# 程序中定义和使用常量 −
using System;
namespace DeclaringConstants {
class Program {
static void Main(string[] args) {
const double pi = 3.14159;
// constant declaration
double r;
Console.WriteLine("Enter Radius: ");
r = Convert.ToDouble(Console.ReadLine());
double areaCircle = pi * r * r;
Console.WriteLine("Radius: {0}, Area: {1}", r, areaCircle);
Console.ReadLine();
}
}
}
上述代码编译并执行后,将产生以下结果 −
Enter Radius: 3 Radius: 3, Area: 28.27431
示例 2
下面的示例在一个 C# 代码中同时演示了字符串字面量和浮点字面量 −
using System;
class Example {
static void Main() {
// String Literals
string regularString = "Hello, World!";
string verbatimString = @"C:\Users\Admin\Documents\";
Console.WriteLine("Regular String Literal: " + regularString);
Console.WriteLine("Verbatim String Literal: " + verbatimString);
// Floating Point Literals
float floatLiteral = 3.14F;
// Default floating-point type
double doubleLiteral = 3.14159265359;
// Requires 'M' suffix for high precision
decimal decimalLiteral = 3.14159265359M;
Console.WriteLine("\nFloating Point Literals:");
Console.WriteLine("Float Literal: " + floatLiteral);
Console.WriteLine("Double Literal: " + doubleLiteral);
Console.WriteLine("Decimal Literal: " + decimalLiteral);
}
}
上述代码的输出如下 −
Regular String Literal: Hello, World! Verbatim String Literal: C:\Users\Admin\Documents\ Floating Point Literals: Float Literal: 3.14 Double Literal: 3.14159265359 Decimal Literal: 3.14159265359