跳到主要内容

C# 变量和(原始)数据类型

提示
  1. 变量的定义和声明:在C#中,变量是分配给内存位置的符号名称,用于存储数据。变量必须声明其类型,可以在声明时初始化,或者之后赋值。变量的类型一旦声明,在其作用域内不可更改。
  2. 隐式类型变量:使用 var 关键字可以声明隐式类型的局部变量,需要在声明时进行初始化。编译器根据初始化值自动确定变量的类型。
  3. 变量命名规则和数据类型
    • 命名规则:变量名可以包含字母、数字、下划线,必须以字母或下划线开头,不能是C#关键字,区分大小写。
    • 数据类型:C#提供多种数据类型,包括布尔型(bool)、有符号和无符号整型(int, long, byte, ushort等)、浮点数(float, double)、字符(char)和Decimal等。

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

如何在 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;

编译器根据赋给变量的值来确定变量的类型。在上面的示例中,valueint 类型的。这等同于:

int value;
value = 5;

您可以了解更多关于隐式类型的局部变量

C# 中变量命名规则

命名变量时,我们需要遵循一定的规则。C# 中命名变量的规则如下:

  1. 变量名称只能包含字母(大写和小写)、下划线(_)和数字。
  2. 变量名称必须以字母、下划线或 @ 符号开头。例如,

C# 中变量命名规则

变量名称备注
name有效
subject101有效
_age有效(命名私有成员变量的最佳实践)
@break有效(如果名称是保留关键字)
101subject无效(以数字开头)
your_name有效
your name无效(包含空格)
  1. C# 是区分大小写的。这意味着 ageAge 指的是两个不同的变量。
  2. 变量名称不能是 C# 关键字。例如,ifforusing 不能作为变量名称。我们将在下一个教程中讨论更多关于 C# 关键字

命名变量的最佳实践

  1. 选择有意义的变量名。例如,nameagesubjectnas 更有意义。
  2. 对于局部变量的命名,使用 camelCase 符号(以小写字母开头)。例如,numberOfStudentsage 等。
  3. 对于公共成员变量的命名,使用 PascalCaseCamelCase 符号(以大写字母开头)。例如,FirstNamePrice 等。
  4. 对于私有成员变量的命名,使用下划线 (_) 后跟 camelCase 符号。例如,_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(age);
}
}
}

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

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 × 1038
  • 默认值: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

  • Decimal 类型与浮点数类型(double 和 float)相比具有更高的精度和较小的范围,因此适合于货币计算。
  • 大小:128 位
  • 默认值:0.0M [末尾的 M 表示值为 decimal 类型]
  • 范围:(-7.9 x 1028 到 7.9 x 1028) / (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;// 十进制值 284

浮点数字面量

  • 浮点数字面量用于初始化 float 和 double 数据类型的变量。
  • 如果浮点数字面量以后缀 fF 结尾,则它是 float 类型的。类似地,如果它以 dD 结尾,则它是 double 类型的。如果没有任何后缀,则默认为 double 类型。
  • 这些字面量在科学记数法中包含 e 或 E。
double number = 24.67;// 默认为 double
float value = -12.29F;
double scientificNotation = 6.21e2;// 等同于 6.21 x 10^2,即 621

字符和字符串字面量

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