C# 变量和(基本)数据类型

变量是赋予给内存位置的符号名称。变量用于在计算机程序中存储数据。


如何在 C# 中声明变量?

下面是在 C# 中声明变量的示例。

int age;

在此示例中,声明了一个类型为 int(整数)的变量 age,它只能存储整数值。

我们可以在程序稍后像这样为变量赋值:

int age;
... ... ...
age = 24;

但是,变量也可以在声明时初始化为某个值。例如:

int age = 24;

在此,一个类型为 int 的变量 age 被声明并同时初始化为 24

由于它是一个变量,我们也可以更改变量的值。例如:

int age = 24;
age = 35;

在此,age 的值从 24 更改为 35。


C# 中的变量必须在使用前声明。这意味着,在为变量赋值之前,必须知道变量的名称和类型。这就是为什么 C# 被称为 静态类型语言

声明后,变量的数据类型不能在作用域内更改。作用域可以被认为是变量可见或可用的代码块。如果您不理解上一句话,请放心,我们将在后面的章节中学习作用域。

目前请记住,在 C# 中我们不能这样做:

int age;
age = 24;
... ... ...
float age;

隐式类型变量

在 C# 中,我们也可以使用 var 关键字声明一个不知道其类型的变量。这类变量被称为隐式类型局部变量

使用 var 关键字声明的变量必须在声明时进行初始化。

var value = 5;

编译器从赋给变量的值确定变量的类型。在上面的示例中,value 的类型为 int。这等同于:

int value;
value = 5;

您可以在此处了解有关 隐式类型局部变量 的更多信息。


C# 中变量的命名规则

在为变量命名时,我们需要遵循某些规则。C# 中变量的命名规则是:

  1. 变量名可以包含字母(大写和小写)、下划线(_)和数字。例如:
  2. 变量名必须以字母、下划线或 @ 符号开头。例如:
    C# 变量命名规则
    变量名 备注
    name 有效
    subject101 有效
    _age 有效(命名私有成员变量的最佳实践)
    @break 有效(当名称是保留关键字时使用)
    101subject 无效(以数字开头)
    your_name 有效
    your name 无效(包含空格)
  3. C# 是区分大小写的。这意味着 ageAge 指的是两个不同的变量。
  4. 变量名不能是 C# 关键字。例如,ifforusing 不能用作变量名。我们将在下一个教程中详细讨论 C# 关键字

变量命名的最佳实践

  1. 选择一个有意义的变量名。例如,nameagesubjectnas 更有意义。
  2. 使用驼峰式命名法(以小写字母开头)来命名局部变量。例如,numberOfStudentsage 等。
  3. 使用帕斯卡命名法驼峰式命名法(以大写字母开头)来命名公共成员变量。例如,FirstNamePrice 等。
  4. 在私有成员变量名中使用前导下划线(_),后跟驼峰式命名法。例如,_bankBalance_emailAddress 等。

您可以在此处了解有关 C# 命名约定 的更多信息。

不用担心公共和私有成员变量。我们将在后面的章节中学习它们。


C# 基本数据类型

C# 中的变量大致分为两类:值类型引用类型。在本教程中,我们将讨论基本(简单)数据类型,它是值类型的一个子集。

引用类型将在以后的教程中介绍。但是,如果您想了解更多关于变量类型的信息,请访问 C# 类型和变量(官方 C# 文档)。

布尔类型 (bool)

  • 布尔数据类型有两个可能的值:truefalse
  • 默认值false
  • 布尔变量通常用于检查条件,例如在 *if 语句*、*循环* 等中。

例如

using System;
namespace DataType
{
    class BooleanExample
    {
        public static void Main(string[] args)
        {
            bool isValid = true;
            Console.WriteLine(isValid);
        }
    }
}

当我们运行程序时,输出将是:

True

有符号整数

这些数据类型存储整数值(正数和负数)。在所有可用位数中,有一位用于符号。

1. sbyte

  • 大小:8 位
  • 范围:-128 到 127。
  • 默认值: 0

例如

using System;
namespace DataType
{
    class SByteExample
    {
        public static void Main(string[] args)
        {
            sbyte level = 23;
            Console.WriteLine(level);
        }
    }
}

当我们运行程序时,输出将是:

23

尝试分配超出范围的值,即小于 -128 或大于 127,然后看看会发生什么。


2. short

  • 大小:16 位
  • 范围:-32,768 到 32,767
  • 默认值: 0

例如

using System;
namespace DataType
{
    class ShortExample
    {
        public static void Main(string[] args)
        {
            short value = -1109;
            Console.WriteLine(value);
        }
    }
}

当我们运行程序时,输出将是:

-1109

3. int

  • 大小:32 位
  • 范围:-2^31 到 2^31-1
  • 默认值: 0

例如

using System;
namespace DataType
{
    class IntExample
    {
        public static void Main(string[] args)
        {
            int score = 51092;
            Console.WriteLine(score);
        }
    }
}

当我们运行程序时,输出将是:

51092

4. long

  • 大小:64 位
  • 范围:-2^63 到 2^63-1
  • 默认值0L [末尾的 L 表示该值为 long 类型]

例如

using System;
namespace DataType
{
    class LongExample
    {
        public static void Main(string[] args)
        {
            long range = -7091821871L;
            Console.WriteLine(range);
        }
    }
}

当我们运行程序时,输出将是:

-7091821871

无符号整数

这些数据类型仅存储大于或等于 0 的值。当我们确定不会出现负值时,通常使用这些数据类型来存储值。

1. byte

  • 大小:8 位
  • 范围:0 到 255。
  • 默认值: 0

例如

using System;
namespace DataType
{
    class ByteExample
    {
        public static void Main(string[] args)
        {
            byte age = 62;
            Console.WriteLine(level);
        }
    }
}

当我们运行程序时,输出将是:

62

2. ushort

  • 大小:16 位
  • 范围:0 到 65,535
  • 默认值: 0

例如

using System;
namespace DataType
{
    class UShortExample
    {
        public static void Main(string[] args)
        {
            ushort value = 42019;
            Console.WriteLine(value);
        }
    }
}

当我们运行程序时,输出将是:

42019

3. uint

  • 大小:32 位
  • 范围:0 到 2^32-1
  • 默认值: 0

例如

using System;
namespace DataType
{
    class UIntExample
    {
        public static void Main(string[] args)
        {
            uint totalScore = 1151092;
            Console.WriteLine(totalScore);
        }
    }
}

当我们运行程序时,输出将是:

1151092

4. ulong

  • 大小:64 位
  • 范围:0 到 2^64-1
  • 默认值: 0

例如

using System;
namespace DataType
{
    class ULongExample
    {
        public static void Main(string[] args)
        {
            ulong range = 17091821871L;
            Console.WriteLine(range);
        }
    }
}

当我们运行程序时,输出将是:

17091821871

浮点数

这些数据类型存储浮点值,即包含小数位的数字。例如,12.36、-92.17 等。

1. float

  • 单精度浮点类型
  • 大小:32 位
  • 范围:1.5 × 10^-45 到 3.4 × 10^38
  • 默认值:0.0F [末尾的 F 表示该值为 float 类型]

例如

using System;
namespace DataType
{
    class FloatExample
    {
        public static void Main(string[] args)
        {
            float number = 43.27F;
            Console.WriteLine(number);
        }
    }
}

当我们运行程序时,输出将是:

43.27

2. double

例如

using System;
namespace DataType
{
    class DoubleExample
    {
        public static void Main(string[] args)
        {
            double value = -11092.53D;
            Console.WriteLine(value);
        }
    }
}

当我们运行程序时,输出将是:

-11092.53

字符 (char)

  • 它表示一个 16 位 Unicode 字符。
  • 大小:16 位
  • 默认值: '\0'
  • 范围:U+0000 ('\u0000') 到 U+FFFF ('\uffff')

例如:

using System;
namespace DataType
{
    class CharExample
    {
        public static void Main(string[] args)
        {
            char ch1 ='\u0042';
            char ch2 = 'x';
            Console.WriteLine(ch1);
            Console.WriteLine(ch2);
        }
    }
}

当我们运行程序时,输出将是:

B
x

'B' 的 Unicode 值是 '\u0042',因此打印 ch1 将打印 'B'


Decimal

  • 与浮点类型(double 和 float)相比,Decimal 类型具有更高的精度和更小的范围。因此,它适用于货币计算。
  • 大小:128 位
  • 默认值:0.0M [末尾的 M 表示该值为 decimal 类型]
  • 范围:(-7.9 x 10^28 到 7.9 x 10^28)/(100 到 28)

例如:

using System;
namespace DataType
{
    class DecimalExample
    {
        public static void Main(string[] args)
        {
         decimal bankBalance = 53005.25M;
            Console.WriteLine(bankBalance);
        }
    }
}

当我们运行程序时,输出将是:

53005.25

后缀 Mm 必须加在末尾,否则该值将被视为 double 类型并生成错误。


C# 字面量

我们来看以下语句:

int number = 41;

这里,

  • int 是一个数据类型
  • number 是一个变量,并且
  • 41 是一个字面量

字面量是程序中出现的固定值。它们不需要任何计算。例如,5false'w' 是直接出现在程序中的字面量,无需任何计算。


布尔字面量

  • true 和 false 是可用的布尔字面量。
  • 它们用于初始化布尔变量。

例如

bool isValid = true;
bool isPresent = false;

整数字面量

  • 整数字面量用于初始化整数数据类型的变量,即 sbyteshortintlongbyteushortuintulong
  • 如果整数字面量以 Ll 结尾,则其类型为 long。为最佳实践,请使用 L(而非 l)。
    long value1 = 4200910L;
    long value2 = -10928190L;
  • 如果整数字面量以 0x 开头,则表示十六进制值。没有前缀的数字被视为十进制值。C# 不允许八进制和二进制表示。
    int decimalValue = 25;
    int hexValue = 0x11c;// decimal value 284

浮点字面量

  • 浮点字面量用于初始化 float 和 double 数据类型的变量。
  • 如果浮点字面量以后缀 fF 结尾,则其类型为 float。同样,如果以 dD 结尾,则其类型为 double。如果两者都没有后缀,则默认其类型为 double。
  • 这些字面量在科学计数法中包含 e 或 E。
    double number = 24.67;// double by default
    float value = -12.29F;
    double scientificNotation = 6.21e2;// equivalent to 6.21 x 100 i.e. 621

字符和字符串字面量

  • 字符字面量用于初始化 char 数据类型的变量。
  • 字符字面量用单引号括起来。例如,'x''p' 等。
  • 它们可以表示为字符、十六进制转义序列、Unicode 表示或转换为 char 的整数值。
    char ch1 = 'R';// character
    char ch2 = '\x0072';// hexadecimal
    char ch3 = '\u0059';// unicode
    char ch4 = (char)107;// casted from integer
  • 字符串字面量是字符字面量的集合。
  • 它们用双引号括起来。例如,"Hello""Easy Programming" 等。
    string firstName = "Richard";
    string lastName = " Feynman";
  • C# 还支持转义序列字符,例如:
     
    字符 含义
    \' 单引号
    \" 双引号
    \\ 反斜杠
    \n 换行
    \r 回车符
    \t 水平制表符
    \a 响铃
    \b 退格符
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战