C# 数据类型与变量

3.1 数据类型概述

C# 是强类型语言,每个变量都必须有明确的类型。C# 类型分为两大类:

值类型(Value Types)

直接存储数据,分配在栈上:

  • 整数类型:sbyte, byte, short, ushort, int, uint, long, ulong
  • 浮点类型:float, double, decimal
  • 字符类型:char
  • 布尔类型:bool
  • 枚举:enum
  • 结构体:struct

引用类型(Reference Types)

存储对象的引用,分配在堆上:

  • string(字符串)
  • object(所有类型的基类)
  • dynamic(动态类型)
  • 类(class
  • 接口(interface
  • 数组(array
  • 委托(delegate

3.2 整数类型

类型 大小 范围 示例
sbyte 8 位 -128 ~ 127 sbyte a = -50;
byte 8 位 0 ~ 255 byte b = 200;
short 16 位 -32,768 ~ 32,767 short c = -1000;
ushort 16 位 0 ~ 65,535 ushort d = 50000;
int 32 位 -21 亿 ~ 21 亿 int e = 100000;
uint 32 位 0 ~ 42 亿 uint f = 3000000000u;
long 64 位 极大范围 long g = 10000000000L;
ulong 64 位 0 ~ 极大 ulong h = 10000000000UL;

整数示例

1
2
3
4
5
6
int age = 25;
long population = 8_000_000_000L; // 使用下划线提高可读性
uint positiveNumber = 100u;

Console.WriteLine($"年龄: {age}");
Console.WriteLine($"人口: {population}");

3.3 浮点类型

类型 大小 精度 示例
float 32 位 7 位 float a = 3.14f;
double 64 位 15-16 位 double b = 3.14159;
decimal 128 位 28-29 位 decimal c = 3.141592653589793m;

浮点示例

1
2
3
4
5
6
7
8
9
10
11
12
// float 需要 f 后缀
float temperature = 36.6f;

// double 是默认浮点类型
double pi = 3.14159265358979;

// decimal 用于高精度计算(金融)
decimal price = 19.99m;
decimal tax = 0.08m;
decimal total = price * (1 + tax);

Console.WriteLine($"总价: {total:C}"); // 输出: ¥21.59

3.4 字符与布尔

char 字符

1
2
3
4
5
6
7
8
9
10
11
// 单引号表示字符
char letter = 'A';
char digit = '5';
char symbol = '$';

// Unicode 字符
char heart = '\u2665'; // ♥
char smile = '\u263A'; // ☺

Console.WriteLine($"字符: {letter}");
Console.WriteLine($"Unicode: {heart}");

bool 布尔

1
2
3
4
5
6
7
8
9
bool isAdult = true;
bool isStudent = false;

// 布尔表达式
int age = 20;
bool canVote = age >= 18; // true

Console.WriteLine($"是否成年: {isAdult}");
Console.WriteLine($"可以投票: {canVote}");

3.5 string 字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 字符串字面量
string name = "Alice";
string greeting = "Hello, World!";

// 逐字字符串(不转义)
string path = @"C:\Users\Alice\Documents";
string multiLine = @"
第一行
第二行
第三行
";

// 字符串插值
int age = 25;
string message = $"{name} 今年 {age} 岁";

// 常用方法
string upper = name.ToUpper(); // "ALICE"
string lower = name.ToLower(); // "alice"
int length = name.Length; // 5
bool contains = name.Contains("lic"); // true

3.6 变量声明

基本声明

1
2
3
4
5
6
7
8
9
10
// 声明并初始化
int x = 10;
string name = "Bob";

// 先声明后赋值
int y;
y = 20;

// 多个变量
int a = 1, b = 2, c = 3;

var 隐式类型

1
2
3
4
5
6
7
8
// 编译器自动推断类型
var number = 42; // int
var text = "Hello"; // string
var flag = true; // bool
var list = new List<int>(); // List<int>

// 必须初始化才能使用 var
// var x; // 错误:无法推断类型

常量

1
2
3
4
5
6
// const 编译时常量
const double PI = 3.14159265358979;
const int MAX_SIZE = 100;

// 必须初始化,不能修改
// PI = 3.14; // 错误

3.7 值类型与引用类型区别

值类型示例

1
2
3
4
5
6
int a = 10;
int b = a; // 复制值
b = 20;

Console.WriteLine(a); // 10(不受影响)
Console.WriteLine(b); // 20

引用类型示例

1
2
3
4
5
6
7
8
9
10
11
class Person
{
public string Name { get; set; }
}

Person p1 = new Person { Name = "Alice" };
Person p2 = p1; // 复制引用
p2.Name = "Bob";

Console.WriteLine(p1.Name); // "Bob"(被修改)
Console.WriteLine(p2.Name); // "Bob"

3.8 可空类型

值类型可空

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 传统写法
int? nullableInt = null;
int? age = 25;

// .NET 6+ 写法
int? score = null;

// 检查是否有值
if (score.HasValue)
{
Console.WriteLine(score.Value);
}

// 空合并运算符
int finalScore = score ?? 0; // 如果 null 则为 0

// 空条件运算符
int? length = score?.ToString().Length;

引用类型可空(.NET 8+)

1
2
3
4
5
6
// 启用可空引用类型后
string? name = null; // 可以为 null
string text = "Hello"; // 不应为 null

// 空条件访问
int? len = name?.Length;

3.9 默认值

值类型默认值

1
2
3
4
int defaultInt = default;        // 0
double defaultDouble = default; // 0.0
bool defaultBool = default; // false
char defaultChar = default; // '\0'

引用类型默认值

1
2
string defaultString = default;  // null
object defaultObject = default; // null

3.10 本章小结

  • C# 类型分为值类型和引用类型
  • 整数类型:int 最常用,long 用于大数
  • 浮点类型:double 默认,decimal 用于金融
  • string 是引用类型,char 是值类型
  • var 让编译器推断类型,必须初始化
  • const 定义编译时常量
  • 可空类型 T? 允许值为 null

练习题

  1. 声明变量存储你的姓名、年龄、身高
  2. 使用 decimal 计算商品总价(含税费)
  3. 尝试使用 var 声明各种类型
  4. 以下代码输出什么?
    1
    2
    3
    4
    int a = 10;
    int b = a;
    b = 20;
    Console.WriteLine(a);
ByteFisher
分享编程技术 · 记录钓鱼乐趣
扫码关注
▸ 扫码关注 ◂
分享: