为什么要学习C#源代码
- 主要是因为很多大厂面试爱问C#的一些经典数据结构(如字典)的底层实现(如:2020年网易unity社招面试经历 by Shadowrabbit)
ILSpy的安装和配置
为什么要使用ILSpy
- 我的Unity使用的是.NET Standard 2.1的C# API,而微软并没有公布该API的源代码(只公开了.NET Framework的源代码,版本不一致最好不要用,否则做一些类似于字典类数据结构的GC优化的时候没法看到正确的源代码,而没法逐步优化代码)
- ILSpy反编译器可以反编译C# DLL库,生成代码
VS中怎么添加ILSpy
接下来按提示一步步执行即可
VS中怎么打开ILSpy
- step1:按照下图打开ILSpy
- step2:根据当前unity使用的API等级,确认对应的C#版本,例如.NET Standard 2.1对应C#8.0(C# 语言版本控制 - C# 指南 | Microsoft Learn)
ILSpy的缺陷
- 反编译产生的局部变量可能会乱命名,使我们不知实际含义,例如以下的int num, num2, num3, num5。
- 而参考上面提到的.NET Framework的源码,会发现这几个局部变量的实际命名为int hashCode, targetBucket, collisionCount, index
怎么学习C#源码?
结合上面对于ILSpy的介绍,学习时应该:
- 将ILSpy的反编译代码和.NET Framework源码结合起来看。(后者用于参考局部变量的实际含义)