C# 简介(手把手讲解)

更新时间:

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

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

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

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

前言

在编程语言的浩瀚星海中,C#(发音为 C Sharp)以其简洁优雅的语法和广泛的应用场景,成为开发者们青睐的工具之一。自2000年微软发布以来,它凭借与.NET框架的深度整合、强大的面向对象特性以及跨平台开发能力,逐渐成长为企业级应用、游戏开发和云服务领域的核心语言。无论是编程新手还是经验丰富的开发者,C# 都能提供从简单脚本到复杂系统构建的完整解决方案。本文将从基础概念、核心特性到实际案例,系统性地为读者呈现 C# 简介,帮助读者快速掌握这门语言的核心逻辑与应用场景。


C# 的发展历史与定位

从诞生到成熟:C# 的演进之路

C# 由微软首席架构师安德斯·赫尔姆斯特罗姆(Anders Hejlsberg)主导设计,最初是为微软的.NET框架配套开发的编程语言。其设计理念融合了C++的高效性、Java的简洁性以及Visual Basic的易用性,旨在为开发者提供一种兼具开发效率与执行性能的现代化语言。

自2002年C# 2.0引入泛型(Generics)以来,语言特性不断扩展:

  • C# 3.0(2007年):支持LINQ(Language Integrated Query),实现数据库与集合的统一查询语法。
  • C# 7.0(2017年):引入元组(Tuple)和模式匹配(Pattern Matching),提升代码表达力。
  • C# 11.0(2022年):新增“文件类”(File Classes)和“安全可变模式”(Safe Disposable Patterns),强化代码组织与资源管理能力。

C# 的应用场景

C# 的定位远不止于传统桌面应用开发。它覆盖的领域包括:

  • 企业级应用:通过ASP.NET Core构建高性能Web服务。
  • 游戏开发:Unity引擎的核心语言,全球80%以上的游戏使用C#开发。
  • 云服务:Azure平台与Docker容器的无缝集成,支持微服务架构。
  • 物联网(IoT):借助.NET的跨平台特性,开发嵌入式系统与智能设备。

C# 的核心特性与语法基础

语法风格:简洁与严谨的平衡

C# 的语法设计既保留了C语言家族的简洁性,又通过严格的类型检查和面向对象特性确保代码的健壮性。例如,变量声明需显式指定类型,避免隐式类型转换带来的潜在风险:

int age = 25;          // 明确声明整型变量  
string name = "Alice"; // 使用string类型表示文本  
bool isStudent = true; // 布尔值只能是true或false  

代码块与缩进

C# 使用大括号 {} 定义代码块,缩进仅为可读性辅助,而非语法强制:

if (temperature > 30)  
{  
    Console.WriteLine("今天很热!");  
}  
else  
{  
    Console.WriteLine("天气宜人。");  
}  

面向对象编程:构建可复用的代码模块

C# 是完全面向对象的语言,其核心概念包括类(Class)、对象(Object)、继承(Inheritance)、多态(Polymorphism)和封装(Encapsulation)。

类与对象:现实世界的抽象

可以将类比作“蓝图”,而对象是根据蓝图创建的具体“实例”。例如:

// 定义Person类  
public class Person  
{  
    public string Name { get; set; }  
    public int Age { get; set; }  

    // 构造函数  
    public Person(string name, int age)  
    {  
        Name = name;  
        Age = age;  
    }  

    // 成员方法  
    public void Introduce()  
    {  
        Console.WriteLine($"我是{Name},今年{Age}岁。");  
    }  
}  

// 创建对象  
Person alice = new Person("Alice", 25);  
alice.Introduce();  // 输出:"我是Alice,今年25岁。"  

继承:代码复用的阶梯

通过继承,子类可以继承父类的属性与方法,并扩展或覆盖(Override)功能:

public class Student : Person  // Student继承自Person  
{  
    public string School { get; set; }  

    // 覆盖父类方法  
    public override void Introduce()  
    {  
        base.Introduce(); // 调用父类方法  
        Console.WriteLine($"我在{School}上学。");  
    }  
}  

Student bob = new Student("Bob", 20);  
bob.School = "清华大学";  
bob.Introduce();  
// 输出:  
// 我是Bob,今年20岁。  
// 我在清华大学上学。  

泛型:类型安全的灵活性

泛型(Generics)允许开发者在不指定具体类型的情况下编写代码,同时保持类型安全。例如,一个泛型列表可以存储任意类型的数据,但会强制类型检查:

List<int> numbers = new List<int>();  
numbers.Add(100);       // 正确  
numbers.Add("Hello");   // 编译报错,类型不匹配  

泛型类的定义

public class Box<T>  
{  
    private T content;  

    public void Store(T item)  
    {  
        content = item;  
    }  

    public T Retrieve()  
    {  
        return content;  
    }  
}  

// 使用  
Box<string> bookBox = new Box<string>();  
bookBox.Store("C#编程入门");  
string book = bookBox.Retrieve(); // 返回字符串类型  

LINQ:统一的数据查询语言

LINQ(Language Integrated Query)是C# 3.0引入的革命性特性,允许开发者用一致的语法查询数据库、集合、XML等数据源。例如:

// 查询书籍集合  
var books = new List<Book>  
{  
    new Book { Title = "C# 简介", Pages = 300 },  
    new Book { Title = "算法导论", Pages = 500 }  
};  

// 使用LINQ筛选页数超过400的书籍  
var longBooks = from b in books  
                where b.Pages > 400  
                select b;  

foreach (var book in longBooks)  
{  
    Console.WriteLine(book.Title);  
}  
// 输出:"算法导论"  

实战案例:构建一个控制台计算器

通过一个简单案例,演示C# 的基本语法与面向对象特性:

需求分析

构建一个支持加减乘除的命令行计算器,要求:

  1. 用户输入表达式(如 5 + 3)。
  2. 输出计算结果。
  3. 支持退出指令(输入 exit 退出程序)。

代码实现

using System;  

class Program  
{  
    static void Main()  
    {  
        while (true)  
        {  
            Console.Write("请输入表达式(或输入exit退出): ");  
            string input = Console.ReadLine();  

            if (input.ToLower() == "exit")  
                break;  

            try  
            {  
                // 提取操作数和运算符  
                string[] parts = input.Split(' ');  
                if (parts.Length != 3)  
                {  
                    Console.WriteLine("格式错误!请使用:数字 运算符 数字");  
                    continue;  
                }  

                double num1 = double.Parse(parts[0]);  
                string op = parts[1];  
                double num2 = double.Parse(parts[2]);  

                // 执行运算  
                double result = Calculate(num1, op, num2);  
                Console.WriteLine($"结果: {result}");  
            }  
            catch (Exception ex)  
            {  
                Console.WriteLine($"错误: {ex.Message}");  
            }  
        }  
    }  

    static double Calculate(double a, string operatorSymbol, double b)  
    {  
        switch (operatorSymbol)  
        {  
            case "+": return a + b;  
            case "-": return a - b;  
            case "*": return a * b;  
            case "/":  
                if (b == 0) throw new DivideByZeroException("除数不能为零!");  
                return a / b;  
            default:  
                throw new ArgumentException("无效的运算符!");  
        }  
    }  
}  

运行效果

请输入表达式(或输入exit退出): 10 + 5  
结果: 15  
请输入表达式(或输入exit退出): 20 / 0  
错误: 除数不能为零!  
请输入表达式(或输入exit退出): exit  

性能与调试:优化代码的实用技巧

性能优化原则

  1. 避免不必要的对象创建:使用 StringBuilder 替代频繁拼接字符串。
  2. 循环内减少计算量:将不变的值提前计算并缓存。
  3. 利用异步编程:通过 async/await 避免阻塞主线程。

调试工具与最佳实践

  • 断点调试:在Visual Studio或VS Code中设置断点,逐行执行代码。
  • 日志输出:通过 Console.WriteLine 或日志库(如NLog)记录关键节点状态。
  • 单元测试:使用xUnit或NUnit编写测试用例,确保代码功能稳定。

结论

通过本文对 C# 简介 的系统性梳理,我们看到这门语言在语法设计、面向对象特性以及实际应用场景中的强大表现。从简单的控制台程序到复杂的企业级系统,C# 提供了从基础语法到高级特性的完整工具链。对于编程初学者,它通过严格的类型系统和清晰的面向对象模型降低学习门槛;对于中级开发者,其泛型、LINQ和跨平台能力则为复杂问题的解决提供了高效方案。

未来,随着.NET 8的发布和开源生态的持续发展,C# 将在人工智能、物联网等领域进一步拓展其影响力。无论是构建下一代游戏、优化企业服务架构,还是探索云原生技术,C# 都能成为开发者实现技术目标的强大伙伴。

(全文约1800字)

最新发布