C# 4.0 是 2010 年随 .NET Framework 4.0 一起发布 的版本,主要增加了动态编程能力、可选参数、泛型协变/逆变等功能,
提升了灵活性和与 COM 组件及动态语言(如 Python、JavaScript)的互操作性。
1️⃣ 动态类型(dynamic
)
- 允许在运行时确定对象的类型,而不是编译时。
- 主要用于与 COM 组件、动态语言(如 Python)和反射交互。
dynamic obj = "Hello";
Console.WriteLine(obj.Length); // 运行时解析
obj = 123;
Console.WriteLine(obj + 10); // 133
✅ 应用场景:
- 与 COM 组件交互(如 Office 自动化)
- 调用 Python/JavaScript 代码
- 简化反射调用
2️⃣ 可选参数 & 具名参数
🔹 可选参数
-
方法的参数可以有默认值,调用时可以省略。
void Greet(string name = "Guest", int age = 18)
{
Console.WriteLine($"Hello {name}, Age: {age}");
}
Greet(); // Hello Guest, Age: 18
Greet("Tom"); // Hello Tom, Age: 18
Greet("Alice", 25); // Hello Alice, Age: 25
🔹 具名参数
可以按照参数名传递值,而不是按顺序。
Greet(age: 30, name: "John"); // Hello John, Age: 30
✅ 应用场景:
- 简化方法调用
- 提高代码可读性
- 支持 COM 组件(如 Excel 操作)
3️⃣ 泛型协变(Covariance) & 逆变(Contravariance)
C# 4.0 让泛型接口和委托支持协变(out
)和逆变(in
),增强了泛型的灵活性。
🔹 协变 (out
)
子类型可以替代父类型(返回值的类型可以是派生类)。
public interface ICovariant<out T> { } ICovariant<string> str = null; ICovariant<object> obj = str; // 允许
🔹 逆变 (in
)
父类型可以替代子类型(参数的类型可以是基类)。
public interface IContravariant<in T> { } IContravariant<object> obj2 = null; IContravariant<string> str2 = obj2; // 允许
✅ 应用场景:
- 适用于泛型委托(如事件处理)
- 提升代码的灵活性
4️⃣ COM 互操作性增强
C# 4.0 让 COM 组件(如 Office API)使用更加简洁:
- 自动移除
ref
修饰符 - 动态调用 COM 方法
🔹 以前(C# 3.0):
Excel.Range range = sheet.get_Range("A1", "B2");
🔹 C# 4.0(更简洁):
dynamic range = sheet.Range["A1", "B2"];
✅ 应用场景:
- Excel / Word / Outlook 操作
- ActiveX 组件
- 与 VB6 代码交互
5️⃣ BigInteger
(大整数支持)
System.Numerics.BigInteger
允许计算超大整数。
using System.Numerics; BigInteger bigNum = BigInteger.Pow(2, 100); // 2^100 Console.WriteLine(bigNum); // 1267650600228229401496703205376
✅ 应用场景:
- 加密算法
- 科学计算
6️⃣ Tuple
(元组)
C# 4.0 引入 Tuple<T1, T2, ...>
,允许返回多个值(但 C# 7.0 以后用 ValueTuple
替代)。
Tuple<int, string> person = new Tuple<int, string>(1, "Alice"); Console.WriteLine(person.Item1); // 1 Console.WriteLine(person.Item2); // Alice
✅ 应用场景:
- 方法返回多个值
- 简化数据结构
🔍 总结
特性 | 作用 |
---|---|
dynamic 类型 |
运行时解析类型,支持 COM 和动态语言 |
可选 & 具名参数 | 简化方法调用,提高可读性 |
泛型协变 & 逆变 | 让泛型更灵活,支持里氏替换 |
COM 互操作增强 | 更好支持 Office API 和 ActiveX |
BigInteger |
处理超大整数 |
Tuple |
方法返回多个值 |
🧐 C# 4.0 的意义
- 提高 灵活性(
dynamic
类型) - 优化 COM 互操作(与 Excel、Word 等更易集成)
- 增强泛型支持(协变 & 逆变)
- 简化代码(可选参数、具名参数、Tuple)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构