发展历程
• 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 上的安装和使用。