C# 教程(千字长文)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言
C# 是一种由微软开发的现代编程语言,因其简洁性、安全性及强大的生态系统,成为开发Windows应用、游戏(Unity引擎)、Web服务(ASP.NET Core)等领域的首选工具之一。无论是编程初学者还是希望拓展技能的中级开发者,掌握C#都能为职业发展打开更多可能性。本文将以“C# 教程”为核心,从环境搭建、基础语法到高级特性,结合案例逐步展开,帮助读者循序渐进地掌握这门语言。
环境搭建与入门准备
开发工具选择
- Visual Studio:微软官方提供的集成开发环境(IDE),支持代码编写、调试、部署全流程,适合复杂项目开发。
- .NET SDK:轻量级命令行工具,适合小型项目或偏好轻量级环境的开发者。
安装步骤示例(以Windows为例):
- 访问 .NET 官网 下载SDK。
- 使用命令行运行以下代码验证安装:
dotnet --info
- 创建第一个控制台应用:
dotnet new console -n MyFirstCSharpApp
cd MyFirstCSharpApp
dotnet run
第一个C#程序:Hello World
using System;
namespace MyFirstApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, C# World!");
}
}
}
比喻:这段代码如同“打招呼的机器人”,Main
方法是程序的起点,Console.WriteLine
则是输出指令的“嘴巴”。
基础语法与核心概念
变量与数据类型
C# 是静态类型语言,需显式声明变量类型。常见数据类型包括:
类型 | 描述 | 存储范围 |
---|---|---|
int | 整数 | -2,147,483,648 到 2,147,483,647 |
double | 双精度浮点数 | 约±5.0×10^-324 到 ±1.7×10^308 |
bool | 布尔值(true/false) | - |
string | 字符串(引用类型) | 可变长度 |
代码示例:
int age = 25; // 整数
double price = 19.99; // 小数
bool isStudent = true; // 布尔值
string name = "Alice"; // 字符串
流程控制:让程序“做决定”
条件语句(if-else)
int score = 85;
if (score >= 90)
{
Console.WriteLine("优秀!");
}
else if (score >= 70)
{
Console.WriteLine("良好。");
}
else
{
Console.WriteLine("需努力。");
}
比喻:if-else
像交通灯,根据条件(红/黄/绿)决定程序执行不同路径。
循环结构
- for 循环:已知循环次数时使用。
for (int i = 0; i < 5; i++)
{
Console.WriteLine($"当前计数:{i}");
}
- while 循环:条件为真时持续执行。
int count = 0;
while (count < 3)
{
Console.WriteLine($"循环次数:{count}");
count++;
}
面向对象编程(OOP)
C# 是完全面向对象的语言,通过类(Class)和对象(Object)组织代码。
类与对象
类的定义:
public class Car
{
// 属性
public string Model { get; set; }
public int Year { get; set; }
// 方法
public void Drive()
{
Console.WriteLine($"正在驾驶 {Model},年份:{Year}");
}
}
创建对象并调用方法:
Car myCar = new Car();
myCar.Model = "Tesla Model S";
myCar.Year = 2023;
myCar.Drive();
比喻:类是“蓝图”,对象是根据蓝图建造的“具体车辆”。
继承与多态
继承:代码复用的桥梁
public class ElectricCar : Car // 继承自Car类
{
public double BatteryCapacity { get; set; }
// 重写父类方法
public new void Drive()
{
base.Drive(); // 调用父类方法
Console.WriteLine($"使用电池容量:{BatteryCapacity} kWh");
}
}
多态:同一接口,不同实现
public interface IAnimal
{
void MakeSound();
}
public class Dog : IAnimal
{
public void MakeSound() => Console.WriteLine("汪汪!");
}
public class Cat : IAnimal
{
public void MakeSound() => Console.WriteLine("喵喵!");
}
// 使用多态
IAnimal myPet = new Dog();
myPet.MakeSound(); // 输出:汪汪!
集合与泛型
集合(Collection):存储多个值
列表(List)
List<string> fruits = new List<string>();
fruits.Add("苹果");
fruits.Add("香蕉");
foreach (var fruit in fruits)
{
Console.WriteLine(fruit);
}
字典(Dictionary)
Dictionary<int, string> studentIDs = new Dictionary<int, string>();
studentIDs.Add(101, "Alice");
studentIDs.Add(102, "Bob");
Console.WriteLine(studentIDs[101]); // 输出:Alice
泛型:类型安全与代码复用
public class Box<T>
{
private T _content;
public void Store(T item) => _content = item;
public T Retrieve() => _content;
}
// 使用泛型
Box<string> nameBox = new Box<string>();
nameBox.Store("C# 教程");
Console.WriteLine(nameBox.Retrieve()); // 输出:C# 教程
LINQ:简化数据查询
LINQ(Language Integrated Query)允许用统一语法查询对象、数据库等数据源。
案例:查询图书库存
var books = new List<Book>
{
new Book { Title = "C# 核心编程", Price = 59.99 },
new Book { Title = "算法导论", Price = 79.90 },
new Book { Title = "设计模式", Price = 65.00 }
};
// 查询价格高于60元的书籍
var expensiveBooks = from book in books
where book.Price > 60
orderby book.Price descending
select book;
foreach (var book in expensiveBooks)
{
Console.WriteLine($"{book.Title} - {book.Price:C}");
}
异步编程:提升程序响应能力
在处理网络请求或文件操作时,异步编程可避免阻塞主线程。
同步 vs 异步示例:
// 同步:阻塞主线程
public void SyncMethod()
{
Thread.Sleep(2000); // 模拟耗时操作
}
// 异步:释放主线程
public async Task AsyncMethod()
{
await Task.Delay(2000); // 异步等待
}
比喻:同步操作像“排队买咖啡”,必须等待;异步则像“自助点餐机”,用户可自由活动。
异常处理:程序的“安全网”
通过try-catch
捕获并处理错误,避免程序崩溃。
try
{
int result = 10 / Convert.ToInt32("ABC"); // 引发异常
}
catch (FormatException ex)
{
Console.WriteLine($"格式错误:{ex.Message}");
}
catch (DivideByZeroException)
{
Console.WriteLine("除零错误!");
}
finally
{
Console.WriteLine("无论是否出错,此处总会执行");
}
实战案例:学生管理系统
需求与设计
- 存储学生信息(姓名、年龄、成绩)
- 提供增删改查功能
代码实现:
class Student
{
public string Name { get; set; }
public int Age { get; set; }
public double Score { get; set; }
}
class Program
{
static List<Student> students = new List<Student>();
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("1. 添加学生 2. 查看列表 3. 退出");
int choice = Convert.ToInt32(Console.ReadLine());
switch (choice)
{
case 1:
AddStudent();
break;
case 2:
ListStudents();
break;
case 3:
return;
}
}
}
static void AddStudent()
{
Console.Write("姓名:");
string name = Console.ReadLine();
Console.Write("年龄:");
int age = Convert.ToInt32(Console.ReadLine());
Console.Write("成绩:");
double score = Convert.ToDouble(Console.ReadLine());
students.Add(new Student { Name = name, Age = age, Score = score });
}
static void ListStudents()
{
foreach (var student in students)
{
Console.WriteLine($"姓名:{student.Name}, 年龄:{student.Age}, 成绩:{student.Score:F1}");
}
}
}
结论
本文通过“C# 教程”的视角,从环境搭建、基础语法到面向对象、异步编程等高级特性,结合代码示例和实战案例,帮助读者逐步构建完整的知识体系。C# 的强类型特性、丰富的类库以及与.NET生态的深度整合,使其成为开发者的有力工具。
下一步学习建议:
- 探索ASP.NET Core开发Web应用;
- 使用Unity引擎实践游戏开发;
- 学习Entity Framework进行数据库操作。
掌握C#不仅需要理论学习,更需通过项目实践巩固技能。希望本文能成为你学习路上的“指南针”,助你在编程世界中稳步前行!