认识数据 - 变量与数据类型

认识数据 - 变量与数据类型

程序的本质是处理数据。这一周,我们将学习如何在程序中存储和使用数据。

变量是什么?

用一个比喻来理解

想象你有许多不同颜色的盒子,每个盒子上都贴着标签:

  • 盒子标签叫"年龄",里面装着数字 25
  • 盒子标签叫"名字",里面装着文字"小明"
  • 盒子标签叫"是否学生",里面装着"是"或"否"

在编程中:

  • 盒子 = 变量
  • 标签 = 变量名
  • 盒子里装的内容 = 变量的值
  • 盒子的类型 = 数据类型(决定能装什么类型的东西)

为什么需要变量?

没有变量,我们就像一个没有记忆的人,每次用完数据就忘了。有了变量,我们可以:

  1. 存储数据:记住信息供后续使用
  2. 传递数据:在程序的不同部分之间传递信息
  3. 处理数据:对数据进行各种操作和计算

例子:

csharp 复制代码
// 计算圆的面积,需要记住圆周率和半径
double pi = 3.14;           // 存储 π 的值
double radius = 5;         // 存储半径
double area = pi * radius * radius;  // 计算面积
Console.WriteLine(area);   // 输出:78.5

C# 基本数据类型

C# 提供了多种数据类型,每种类型适合存储不同类型的数据。

快捷方式:使用 var 关键字

在开始学习各种数据类型之前,先介绍一个方便的写法:var 关键字

var 可以让编译器自动推断变量类型,不需要手动指定类型名。定义时必须赋值,实际类型由定义时的值推断。

csharp 复制代码
// 传统写法(明确指定类型)
int age = 25;
string name = "小明";
double price = 19.99;
bool isStudent = true;

// 使用 var(编译器自动推断类型)
var age = 25;              // 自动推断为 int
var name = "小明";         // 自动推断为 string
var price = 19.99;         // 自动推断为 double
var isStudent = true;      // 自动推断为 bool

注意:

  • var 只是语法糖,编译后变量仍然有明确的类型
  • var 必须在声明时赋值(编译器需要根据值推断类型)
  • 使用 var 可以让代码更简洁,但不要过度使用

什么时候用 var,什么时候不用:

推荐使用 var:

csharp 复制代码
var message = "这是一条消息";  // 类型很明显,用 var 更简洁
var list = new List<string>(); // 类型很长,用 var 更清晰
var user = new { Name = "张三", Age = 20 }; // 匿名类型必须用 var

不推荐使用 var:

csharp 复制代码
var result = SomeMethod();    // 看不出来返回什么类型,不清晰
var age = 25;                // 直接写 int 更明确
var isTrue = true;            // 直接写 bool 更明确

学习建议: 作为初学者,建议先明确写出类型(如 int age = 25),这样可以更好地记忆和理解类型的概念。等你熟悉后,再酌情使用 var 让代码更简洁。


1. 整数类型(int)

存储整数,没有小数部分。

csharp 复制代码
int age = 25;              // 年龄
int count = 100;           // 数量
int temperature = -10;     // 可以是负数

常用场景: 年龄、数量、计数、索引等

2. 浮点数类型(double)

存储带小数的数字。

csharp 复制代码
double pi = 3.1415926;     // 圆周率
double price = 19.99;      // 价格
double height = 1.75;      // 身高

常用场景: 价格、尺寸、科学计算等需要精度的场景

3. 布尔类型(bool)

存储逻辑值,只有两个可能的值:truefalse

csharp 复制代码
bool isStudent = true;     // 是学生
bool isAdult = false;      // 是成年人
bool hasMoney = true;      // 有钱

常用场景: 条件判断、状态标记、开关等

4. 字符串类型(string)

存储文本信息。

csharp 复制代码
string name = "小明";      // 姓名
string message = "Hello!"; // 消息
string email = "abc@example.com"; // 邮箱

常用场景: 姓名、地址、消息、文本内容等

注意: 字符串需要用双引号 " 包围

5. 其他基础类型

除了上述常用的 4 种类型,C# 还提供了其他基础类型:

5.1 其他整数类型
类型 说明 范围 大小
sbyte 有符号字节 -128 到 127 8 位
byte 无符号字节 0 到 255 8 位
short 短整数 -32,768 到 32,767 16 位
ushort 无符号短整数 0 到 65,535 16 位
int 整数(最常用) -2,147,483,648 到 2,147,483,647 32 位
uint 无符号整数 0 到 4,294,967,295 32 位
long 长整数 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 64 位
ulong 无符号长整数 0 到 18,446,744,073,709,551,615 64 位
csharp 复制代码
byte age = 18;              // 年龄,范围 0-255 足够
short temperature = -10;     // 温度,可能是负数
long population = 1400000000; // 人口数量,需要更大的范围

选择原则:

  • 默认使用 int(最常用)
  • 需要存储大数时使用 long
  • 需要确保非负时使用 uintulong
  • 处理字节数据时使用 bytesbyte
5.2 其他浮点数类型
类型 说明 精度 大小
float 单精度浮点数 约 6-7 位小数 32 位
double 双精度浮点数(最常用) 约 15-16 位小数 64 位
decimal 高精度小数 约 28-29 位小数 128 位
csharp 复制代码
float pi = 3.1415926535f;   // 单精度,数字后加 f
double gravity = 9.80665;    // 双精度,默认
decimal price = 19.99m;      // 高精度,适合金融计算,数字后加 m

选择原则:

  • 默认使用 double(最常用)
  • 需要高精度 时使用 decimal(如金额计算)
  • 需要节省内存时使用 float

重要提示:

csharp 复制代码
// ❌ 不建议:用 float 或 double 存储金额
double money = 0.1 + 0.2;
Console.WriteLine(money);  // 输出:0.30000000000000004(精度损失!)

// ✅ 推荐:用 decimal 存储金额
decimal money = 0.1m + 0.2m;
Console.WriteLine(money);  // 输出:0.3(精确!)
5.3 字符类型(char)

存储单个字符。

csharp 复制代码
char grade = 'A';          // 等级
char symbol = '@';         // 符号
char digit = '5';          // 数字字符(注意:这是字符,不是数字!)

注意: 字符需要用单引号 ' 包围

常用场景: 性别('男'、'女')、等级、单个符号等

转义字符:

csharp 复制代码
char newline = '\n';       // 换行符
char tab = '\t';          // 制表符
char quote = '\'';        // 单引号
5.4 空值类型(可空类型)

有时变量可能没有值,C# 使用 ? 表示可空类型。

csharp 复制代码
int? age = null;          // age 可以为 null(没有年龄)
double? price = null;     // price 可以为 null(没有价格)
bool? isVerified = null;  // isVerified 可以为 null(未验证)

// 判断是否有值
if (age.HasValue)
{
    Console.WriteLine($"年龄:{age.Value}");
}
else
{
    Console.WriteLine("年龄未知");
}

常用场景:

  • 数据库中可能为 null 的字段
  • 表单中用户未填写的字段
  • 可能有也可能没有的值

数据类型对比表

类型 关键字 示例 说明
整数 int 123, -45 没有小数的数字
浮点数 double 3.14, 0.5 带小数的数字
布尔 bool true, false 逻辑值
字符串 string "Hello" 文本内容

变量命名规则和规范

命名规则(必须遵守)

  1. 只能包含 :字母、数字、下划线 _
  2. 不能以数字开头
  3. 不能使用 C# 关键字 (如 class, void, int 等)
  4. 区分大小写ageAge 是不同的变量

命名规范(推荐遵守)

好的命名示例:

csharp 复制代码
int studentAge;           // 清晰易懂
string firstName;         // 驼峰命名法
bool isLoggedIn;          // 布尔值通常以 is 开头

不好的命名示例:

csharp 复制代码
int a;                    // 太短,不明确
int Age1;                 // 含义不清
string n;                 // 不推荐

驼峰命名法(Camel Case)

当变量名由多个单词组成时:

  • 第一个单词首字母小写
  • 后续单词首字母大写

示例:

csharp 复制代码
string firstName;         // 不是 firstname
string userEmailAddress;  // 清晰易读
int totalScore;           // 不是 totalscore

实践:计算圆面积

问题:计算半径为 5 的圆的面积

圆面积公式:面积 = π × 半径 × 半径

csharp 复制代码
using System;

namespace Week2Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            // 定义变量
            double pi = 3.1415926;  // 圆周率
            double radius = 5;       // 半径
            double area;            // 面积

            // 计算面积
            area = pi * radius * radius;

            // 输出结果
            Console.WriteLine($"半径为 {radius} 的圆的面积是:{area}");
        }
    }
}

输出结果:

复制代码
半径为 5 的圆的面积是:78.539815

代码说明:

  1. double pi = 3.1415926; - 定义圆周率变量
  2. double radius = 5; - 定义半径变量
  3. double area; - 声明面积变量(先声明,后赋值)
  4. area = pi * radius * radius; - 计算面积并赋值给 area
  5. $"..." - 字符串插值,可以在字符串中直接使用变量

实践:判断年龄是否成年

csharp 复制代码
using System;

namespace Week2Practice
{
    class Program
    {
        static void Main(string[] args)
        {
            // 定义变量
            int age = 18;              // 年龄
            int adultAge = 18;         // 成年年龄标准
            bool isAdult;              // 是否成年

            // 判断是否成年
            isAdult = age >= adultAge;  // age 是否大于等于 18

            // 输出结果
            Console.WriteLine($"年龄:{age} 岁");
            Console.WriteLine($"是否成年:{isAdult}");
        }
    }
}

输出结果:

复制代码
年龄:18 岁
是否成年:True

代码说明:

  1. bool isAdult; - 声明布尔变量
  2. age >= adultAge - 比较表达式,结果为 truefalse
  3. age = 18 时,18 >= 18true

字符串插值($ 字符串)

C# 6.0 引入的便捷特性,可以方便地在字符串中嵌入变量。

csharp 复制代码
string name = "张三";
int age = 20;

// 传统方式(字符串拼接)
Console.WriteLine("姓名:" + name + ",年龄:" + age);

// 字符串插值(推荐)
Console.WriteLine($"姓名:{name},年龄:{age}");

两种方式输出相同的结果,但字符串插值更清晰、易读。

变量赋值

声明和赋值

csharp 复制代码
// 方式一:声明时赋值
int age = 20;

// 方式二:先声明,后赋值
int score;
score = 95;

// 方式三:一次声明多个变量
int a = 1, b = 2, c = 3;

变量重新赋值

csharp 复制代码
int age = 18;
Console.WriteLine(age);  // 输出:18

age = 25;               // 重新赋值
Console.WriteLine(age);  // 输出:25

只读变量(常量)

如果变量的值不会改变,可以使用 const 关键字定义常量。

csharp 复制代码
const double Pi = 3.1415926;  // 常量命名通常首字母大写
const int MaxCount = 100;

// Pi = 3.14;  // 错误!常量不能重新赋值

本章总结

  • ✅ 理解了变量的概念(盒子比喻)
  • ✅ 学习了 C# 基本数据类型
  • ✅ 掌握了变量命名规则和规范
  • ✅ 实践了计算圆面积和判断成年
  • ✅ 学会了字符串插值的用法
相关推荐
fie888918 小时前
基于C#的推箱子小游戏实现
开发语言·c#
.房东的猫18 小时前
ERP(金蝶云星空)开发【业务数据中心创建和注册】
c#
bugcome_com19 小时前
C# 进阶核心知识点汇总|多项目开发 + 委托 + Lambda + 事件一次吃透
c#
SunflowerCoder21 小时前
基于插件化 + Scriban 模板引擎的高效 HTTP 协议中心设计
http·c#
波波0071 天前
每日一题:中间件是如何工作的?
中间件·.net·面试题
无风听海1 天前
.NET 10之可空引用类型
数据结构·.net
码云数智-园园1 天前
基于 JSON 配置的 .NET 桌面应用自动更新实现指南
.net
无风听海1 天前
.NET 10 之dotnet run的功能
.net
岩屿1 天前
Ubuntu下安装Docker并部署.NET API(二)
运维·docker·容器·.net
码云数智-大飞1 天前
.NET 中高效实现 List 集合去重的多种方法详解
.net