TOC

C# 语言

发展历程

Anders Hejlsberg(C#之父)带领团队在微软研究院启动项目
• 目标:打造"互联网时代的第一代编程语言"
• 命名由来:结合 C++的强大与 Visual Basic 的易用性("C Sharp"符号类似音乐符号 ♯)

版本 年份 重大特性
1.0 2002 基础 OOP 支持、CLI 规范
2.0 2005 泛型、属性封装、LINQ 预览
3.0 2007 LINQ 正式版、扩展方法、匿名类型
4.0 2010 动态类型、 covariance/contravariance
5.0 2012 async/await、泛型约束
8.0 2018 包模式、可选引用、索引访问器
11.0 2022 主导模式、模式匹配增强

.NET Core 开源

• 2014 年开源:GitHub 仓库突破 100 万星
• 支持 Linux/macOS:Visual Studio Code + OmniSharp
• .NET 5(2020):统一框架栈,性能提升 30%
• 最新版本:.NET 7(2022)包含 AOT 编译、矢量数据库支持

C# vs C/C++

内存管理对比

// C# 自动垃圾回收
List<int> numbers = new List<int>();
numbers.Add(42); // 无需手动释放内存

// C++ 手动管理
std::vector<int> vec;
vec.push_back(42);
// 需要显式销毁(现代C++使用RAII)

类型系统差异

• C#:强类型+运行时类型检查
• C++:静态类型+多重继承
• 示例:接口与抽象类的选择

public interface IShape { double Area(); }
public abstract class Shape { public abstract double Perimeter(); }

开发效率比较

• C#:23% fewer lines of code(Stack Overflow 开发者调查)
• C:性能敏感场景首选(游戏引擎、高频交易)
• 性能对比:C# vs C
(简单循环)

// C#
for (int i = 0; i < 1000000; i++) { /* ... */ }

// C++
for (int i = 0; i < 1000000; ++i) { /* ... */ }

C# vs Java

语法特性对比

// Java
public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

// C#
using System;

class Program {
    static void Main() {
        Console.WriteLine("Hello");
    }
}

运行时差异

特性 C# (.NET) Java (JVM)
垃圾回收机制 基于代际收集 分代收集 + 增量收集
AOT 编译 .NET 5+ 支持 仅 JIT
类型系统 动态类型支持 严格静态类型
反射性能 较快(类型缓存优化) 较慢(运行时解析)

生态系统比较

• NuGet(C#) vs Maven(Java)
• .NET SDK 包含 150+工具 vs Java SDK 基础包
• 示例:依赖管理

# C#
dotnet add package Newtonsoft.Json

# Java
mvn dependency:get -DartifactId=commons-lang3

Linux 上的 C#开发

# Ubuntu/Debian
sudo apt update
sudo apt install -y mono-complete dotnet-sdk-7.0

# Red Hat/CentOS
sudo yum install -y mono-devel dotnet-sdk-7.0

# 验证安装
mono --version
dotnet --version

项目结构:

HelloWorld/
├── HelloWorld.cs
└── HelloWorld.csproj
using System;

namespace HelloWorld {
    class Program {
        static void Main(string[] args) {
            Console.WriteLine("Hello, World!");
            Console.ReadLine(); // 保持窗口打开
        }
    }
}
# 使用CLI
dotnet new console -o HelloWorld
cd HelloWorld
dotnet run

# 使用Mono
mcs HelloWorld.cs
mono HelloWorld.exe

技术栈

写一篇 C# 语言的入门文章。
介绍 C# 发展历程。
介绍 C、C++、C# 之间的区别。
介绍和 Java 之间的主要区别。
简单介绍和 .NET Framework 和 .NET Core 之间的关系。
简单介绍在 Linux 上的安装和使用。

如果你有魔法,你可以看到一个评论框~