淡若轻风

博客园 首页 新随笔 联系 订阅 管理
  52 随笔 :: 0 文章 :: 0 评论 :: 6421 阅读

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)

 

posted on   淡若轻风  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示