泛型的可变性分析
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Threading.Tasks;
6
7 namespace GenericTest
8 {
9 class Program
10 {
11 /// <summary>
12 ///
13 /// </summary>
14 /// <param name="args"></param>
15 static void Main(string[] args)
16 {
17
18 }
19
20 /// <summary>
21 /// 泛型协变和逆变的代码示例
22 /// 用最简单的代码解释问题
23 /// 协变 和 逆变 其实过程基本一致 本示例使用委托 一下都是针对委托
24 /// 1:声明源方法,委托实例化 用Source表示
25 /// 2:声明目标用Destination 指向 Source
26 /// 3:调用!!!重要 如果不调用 就不能彻底的理解 泛型的可变性
27 /// 所有的转变都发生在调用的时候,通过分析调用过程能够理解泛型的可变性
28 ///
29 /// 通过以上步骤,分析具体代码加强泛型可变性的理解
30 /// </summary>
31 public static void GenericVariant()
32 {
33 //协变
34 //声明源方法,委托实例化 用Source表示
35 Func<string> funcSource = () => "generic variant";
36 //声明目标用Destination表示 并进行委托转换 Source->Destination
37 Func<object> funcDestination = funcSource;
38
39 //调用
40 //调用过程 实际是调用了 funcSource 返回了 string 值
41 //变变变 发生在 从String 的返回值 转换成了Object
42 //注意 out 参数转变方向是 Source -> Destination
43 object result = funcDestination();
44 //string result = funcDestination();
45
46 //逆变
47 //声明源方法,委托实例化 用Source表示 输入参数为object
48 Action<object> actionSource = arg => { Console.Write(arg.ToString()); };
49 //声明目标用Destination表示 并进行委托转换 Source->Destination
50 Action<string> actionDestination = actionSource;
51 //调用
52 //变变变 发生在 从String 的输入参数 转换成了Object
53 //调用过程 实际是调用了 funcSource 返回了 输入参数为object 值
54 //注意 in参数转变方向是 Destination -> Source
55 //actionDestination(new object());
56 actionDestination("abc");
57 /*
58 out 针对返回值 所以 转变方向为 source => destination
59 in 针对输入参数,所以转变方向为 destination =>source
60 其实 协变、逆变都是类型安全的转变
61 */
62
63 }
64 }
65 }
标签:
泛型可变性分析
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述