C# 的常量类别汇总,及常量的定义方式

常量是固定值。

可为任何基本数据类型:整数,浮点数,字符串等。

一、整数常量

前缀:

  • 十进制:没有前缀
  • 八进制:前缀为 0
  • 十六进制:前缀为 0x 或 0X

后缀:

  • unsigned:后缀 U 或 u(表示无符号)
  • long:后缀 L 或 l(表示 64 位有符号整数类型)
  • 多个后缀可任意顺序组合

例:

212         // 合法,整型
215u        // 合法,无符号整型
0xFeeL      // 合法,十六进制整形(0~F 代表 0~15)
078         // 非法,八进制数为 0~7
032UU       // 非法,不能重复后缀

二、浮点数常量

浮点数常量包含:

  • 整数部分
  • 小数点 + 小数部分 或 指数部分

例:

3.14159       // 合法
314159E-5L    // 合法(314159 * 10^-5)
510E          // 非法,有指数标记,但是缺了指数部分
210f          // 非法,没有小数部分/指数部分
.e55          // 非法,没有整数部分/小数部分

三、字符常量

表示 一个 字符,用单引号。

一个字符常量可以是:

  • 一个普通字符
  • 一个转义序列(如 ‘\t’)
  • 一个通用字符(如 ‘\u02C0’)

转义字符表:

转义序列 含义
\ \ 字符
‘ 字符
” 字符
? ? 字符
\a Alert 或 bell
\b 退格键(Backspace)
\f 换页符(Form feed)
\n 换行符(Newline)
\r 回车
\t 水平制表符 tab
\v 垂直制表符 tab
\ooo 一到三位的八进制数
\xhh . . . 一个或多个数字的十六进制数

四、字符串常量

字符串用双引号,或者用@双引号。

例:

string a = "hello, world"; // hello, world
string b = @"hello, world"; // hello, world
string c = "hello \t world"; // hello     world
string d = @"hello \t world"; // hello \t world
string e = "Joe said \"Hello\" to me";
// Joe said "Hello" to me
string f = @"Joe said ""Hello"" to me";
// Joe said "Hello" to me
string g = "\\\\server\\share\\file.txt";
// \\server\share\file.txt
string h = @"\\server\share\file.txt";
// \\server\share\file.txt

混淆的地方:

string i = "one\ntwo\rthree\r\nfour\n\rfive\r\n\nsix";

运行结果:

one
three
four
five

six

可见以下问题:

  • \n 表示换行
  • \r 把前面这一行的内容覆盖了,相当于回到行首
  • \n\r 和 \r\n 的效果一样,都是换行
  • 2 个 \n 即 2 次换行
  • 据说这个差别是操作系统的关系,未证实 ~
string j = @"one
two

three";

运行结果:

one
two

three

五、定义常量

语法:

const <data_type> <constant_name> = value;

例:

using System;

public class ConstTest
{
    class SampleClass
    {
        public int x;
        public int y;
        public const int c1 = 5;
        public const int c2 = c1 + 5;

        public SampleClass(int p1, int p2)
        {
            x = p1;
            y = p2;
        }
    }

    static void Main()
    {
        SampleClass mC = new SampleClass(11, 22);
        // 实例化 SampleClass 这个类,通过对 类下面的方法 SampleClass 进行初始化赋值
        Console.WriteLine("x = {0}, y = {1}", mC.x, mC.y);
        Console.WriteLine("c1 = {0}, c2 = {1}",
                          SampleClass.c1, SampleClass.c2);
    }
}

运行结果:

x = 11, y = 22
c1 = 5, c2 = 10
Tags: