原文: https://www.programiz.com/csharp-programming/variables-primitive-data-types

在本教程中,我们将学习变量,如何在 C# 中创建变量以及 C# 编程语言支持的不同数据类型。

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


如何在 C# 中声明变量?

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

  1. int age;

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

我们可以稍后在程序中为变量分配一个值,如下所示:

  1. int age;
  2. ... ... ...
  3. age = 24;

但是,在声明过程中也可以将变量初始化为某个值。 例如,

  1. int age = 24;

在此,声明类型为int的变量age并将其初始化为24

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

  1. int age = 24;
  2. age = 35;

这里,age的值从 24 更改为 35。


必须先声明 C# 中的变量,然后才能使用它们。 这意味着,必须先知道变量的名称和类型,然后才能为其分配值。 这就是为什么 C# 被称为静态类型语言的原因。

声明后,就不能在范围内更改变量的数据类型。 范围可以看作是代码块,其中变量可见或可以使用。 如果您不理解前面的说明,请不要担心,我们将在后面的章节中了解范围。

现在请记住,我们无法在 C# 中执行以下操作:

  1. int age;
  2. age = 24;
  3. ... ... ...
  4. float age;

隐式变量

另外,在 C# 中,我们可以使用var关键字声明变量而无需知道其类型。 此类变量称为隐式类型局部变量

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

  1. var value = 5;

编译器根据分配给变量的值来确定变量的类型。 在上面的示例中,value的类型为int。 这等效于:

  1. int value;
  2. value = 5;

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


C# 中的变量命名规则

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

  1. 变量名称只能包含字母(大写和小写),下划线(_)和数字。

  2. The variable name must start with either letter, underscore or @ symbol. For example,
    Rules for naming variables in C# | 变量名 | 备注 | | —- | —- | | name | 有效 | | subject101 | 有效 | | _age | 有效(命名私有成员变量的最佳实践) | | @break | 有效(如果名称是保留关键字,则使用) | | 101subject | 无效(以数字开头) | | your_name | 有效 | | your name | 无效(包含空格) |

  1. C# 区分大小写。 这意味着ageAge涉及 2 个不同的变量。

  2. 变量名称不能是 C# 关键字。 例如,ifforusing不能是变量名。 在下一个教程中,我们将讨论 C# 关键字的更多信息。


命名变量的最佳做法

  1. 选择一个有意义的变量名。 例如,nameagesubjectnas更有意义。
  2. 使用 camelCase 表示法(以小写字母开头)来命名局部变量。 例如,numOfStudentsage等。
  3. 使用 PascalCaseCamelCase (以大写字母开头)来命名公共成员变量。 例如,NamePrice等。
  4. 使用前导下划线(_)后跟 camelCase 表示法来命名私有成员变量。 例如,_bankBalance_emailAddress等。

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

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


C# 基本数据类型

C# 中的变量大致分为两种类型:值类型引用类型。 在本教程中,我们将讨论作为值类型的子类的原始(简单)数据类型。

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

bool(布尔)

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

例如:

  1. using System;
  2. namespace DataType
  3. {
  4. class BooleanExample
  5. {
  6. public static void Main(string[] args)
  7. {
  8. bool isValid = true;
  9. Console.WriteLine(isValid);
  10. }
  11. }
  12. }

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

  1. True

带符号整数

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

1.sbyte

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

例如:

  1. using System;
  2. namespace DataType
  3. {
  4. class SByteExample
  5. {
  6. public static void Main(string[] args)
  7. {
  8. sbyte level = 23;
  9. Console.WriteLine(level);
  10. }
  11. }
  12. }

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

  1. 23

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


2.short

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

例如:

  1. using System;
  2. namespace DataType
  3. {
  4. class ShortExample
  5. {
  6. public static void Main(string[] args)
  7. {
  8. short value = -1109;
  9. Console.WriteLine(value);
  10. }
  11. }
  12. }

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

  1. -1109

3. int

  • 大小:32 位
  • 范围:-231 至 231-1
  • 默认值:0

例如:

  1. using System;
  2. namespace DataType
  3. {
  4. class IntExample
  5. {
  6. public static void Main(string[] args)
  7. {
  8. int score = 51092;
  9. Console.WriteLine(score);
  10. }
  11. }
  12. }

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

  1. 51092

4.long

  • 大小:64 位
  • 范围:-263 至 263-1
  • 默认值0L【末尾的L表示该值是long型】

例如:

  1. using System;
  2. namespace DataType
  3. {
  4. class LongExample
  5. {
  6. public static void Main(string[] args)
  7. {
  8. long range = -7091821871L;
  9. Console.WriteLine(range);
  10. }
  11. }
  12. }

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

  1. -7091821871

无符号整数

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

1.byte

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

例如:

  1. using System;
  2. namespace DataType
  3. {
  4. class ByteExample
  5. {
  6. public static void Main(string[] args)
  7. {
  8. byte age = 62;
  9. Console.WriteLine(level);
  10. }
  11. }
  12. }

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

  1. 62

2. ushort

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

例如:

  1. using System;
  2. namespace DataType
  3. {
  4. class UShortExample
  5. {
  6. public static void Main(string[] args)
  7. {
  8. ushort value = 42019;
  9. Console.WriteLine(value);
  10. }
  11. }
  12. }

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

  1. 42019

3. uint

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

例如:

  1. using System;
  2. namespace DataType
  3. {
  4. class UIntExample
  5. {
  6. public static void Main(string[] args)
  7. {
  8. uint totalScore = 1151092;
  9. Console.WriteLine(totalScore);
  10. }
  11. }
  12. }

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

  1. 1151092

4. ulong

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

例如:

  1. using System;
  2. namespace DataType
  3. {
  4. class ULongExample
  5. {
  6. public static void Main(string[] args)
  7. {
  8. ulong range = 17091821871L;
  9. Console.WriteLine(range);
  10. }
  11. }
  12. }

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

  1. 17091821871

浮点

这些数据类型保存浮点值,即包含十进制值的数字。 例如 12.36,-92.17 等。

1.float

  • 单精度浮点型
  • 大小:32 位
  • 范围1.5×10^−453.4×10^38
  • 默认值0.0FF表示值是浮点型】

例如:

  1. using System;
  2. namespace DataType
  3. {
  4. class FloatExample
  5. {
  6. public static void Main(string[] args)
  7. {
  8. float number = 43.27F;
  9. Console.WriteLine(number);
  10. }
  11. }
  12. }

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

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

  • 与浮点类型(双精度和浮点型)相比,十进制类型具有更高的精度和更小的范围。 因此,它适合进行货币计算。
  • 大小:128 位
  • 默认值0.0MM表示十进制类型的值】
  • 范围:(-7.9x10^287.9x10^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,否则该值将被视为双精度值,并会产生错误。


C# 字面值

让我们看下面的语句:

int number = 41;

这里,

  • int是一种数据类型
  • number是变量,
  • 41是字面值

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


布尔字面值

  • truefalse是可用的布尔字面值。
  • 它们用于初始化布尔变量。

例如:

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
    

浮点字面值

  • 浮点字面值用于初始化floatdouble数据类型的变量。

  • 如果浮点字面值以后缀fF结尾,则其类型为float。 同样,如果以dD结尾,则其类型为double。 如果两个后缀都不存在,则默认类型double

  • 这些字面值以科学计数法表示时包含eE

    double number = 24.67;// double by default
    float value = -12.29F;
    double scientificNotation = 6.21e2;// equivalent to 6.21 x 102 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# also supports escape sequence characters such as: | 字符 | 含义 | | —- | —- | | \' | 单引号 | | \" | 双引号 | | \\ | 反斜杠 | | \n | 新队 | | \r | 回车 | | \t | 水平制表符 | | \a | 警报 | | \b | 退格键 |