C# 教程(千字长文)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言

C# 是一种由微软开发的现代编程语言,因其简洁性、安全性及强大的生态系统,成为开发Windows应用、游戏(Unity引擎)、Web服务(ASP.NET Core)等领域的首选工具之一。无论是编程初学者还是希望拓展技能的中级开发者,掌握C#都能为职业发展打开更多可能性。本文将以“C# 教程”为核心,从环境搭建、基础语法到高级特性,结合案例逐步展开,帮助读者循序渐进地掌握这门语言。


环境搭建与入门准备

开发工具选择

  • Visual Studio:微软官方提供的集成开发环境(IDE),支持代码编写、调试、部署全流程,适合复杂项目开发。
  • .NET SDK:轻量级命令行工具,适合小型项目或偏好轻量级环境的开发者。

安装步骤示例(以Windows为例)

  1. 访问 .NET 官网 下载SDK。
  2. 使用命令行运行以下代码验证安装:
dotnet --info  
  1. 创建第一个控制台应用:
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生态的深度整合,使其成为开发者的有力工具。

下一步学习建议

  1. 探索ASP.NET Core开发Web应用;
  2. 使用Unity引擎实践游戏开发;
  3. 学习Entity Framework进行数据库操作。

掌握C#不仅需要理论学习,更需通过项目实践巩固技能。希望本文能成为你学习路上的“指南针”,助你在编程世界中稳步前行!

最新发布