如何阅读源码?

最近打算再看一遍UGUI源码。发现还是有些茫然无绪。

在突然面对大量 官方源码/他人代码 时,大多数人恐怕都是这样。

所以,了解或探究 “如何科学地阅读源码?” 是有意义的!

零、准备。

1、明确自己阅读源码的原因。能解决自己的问题。

2、戒急戒躁,做好长期阅读的准备。

3、黑盒体验,重度使用、熟读文档。明白系统需求、痛点、重点、难点。

4、做好笔记、总结。可以纳入版本管理,长期注解保存。

5、疑问点可以自己动手实例验证、调试。

一、从整体出发

1、看类设计

①、 利用 VS的 类设计器 直接生成类图。

可以查看到,系统中存在哪些类?

类的字段、属性、方法以及嵌套类型有哪些?

类的继承关系是怎么样的?

类分别实现了哪些接口?

等等。。

② 、自己手动按功能绘制局部类图。

注意!类设计器也只是罗列了类的基本关系,并没有指明类间的具体交互关系(如 组合/聚合/关联等)。

(事实上这很复杂,几乎不可能在一张图上展示全部)

想要确定类的关系,必须按功能绘制局部类图。

步骤:“确定待研究功能点 => 寻找关键类 => 确定类之间的关系 => 画出类图”。

2、看接口设计

对于整个程序系统,有哪些接口?接口可以按功能分为哪些组?

对于每组接口,这组接口制定了怎样的规范?这组接口要实现怎样的功能? 

对于每个接口,谁实现了这个接口?谁调用了这个接口?

3、从接口或抽象父类开始

通常,接口或抽象父类定义了其子类的行为规范,子类也正是围绕着这些行为规范填充具体逻辑。

可以认为 接口和抽象父类是骨骼,而子类就是附与骨骼之上的皮肉。

所以对于接口和抽象父类,一定要理解透彻。否则接下来看子类时可能会看得迷迷糊糊不知所云。

二、如何看具体类

可以看核心类(重点)、看独立的类(简单明确)、看关心的类(带着目的)。

打开一个类文件,一定要先把代码全部折叠!先浏览类的所有成员,对类有一个整体认识。

------------------------- NRatel割 -------------------------

对于每个类的成员,都要注意其修饰符。

成员属于类还是对象?(静态修饰符 static)

成员的访问等级是怎样的?(访问性修饰符 public/private/protected/internal/protected internal/private protected)

成员的扩展性是怎样的?(扩展性修饰符 sealed/abstract/virtual)

1、看类的字段

对于一个实体类,字段是类的核心,类通过行为修改字段,又通过字段影响行为,类在序列化后也会只剩字段。

要看类中有哪些字段?

对于每个字段,字段存储了什么类型的数据(字段类型)?字段可能的功能是什么(根据字段名猜测)?字段在何处被赋值和使用(验证字段功能)?

2、看类的属性(字段的set/get访问器)

这是理解类字段含义的重点。

------------------------- NRatel割 -------------------------

属性具有许多用途:(摘自 C#官方文档属性部分

① 、可以先验证数据,再允许进行更改;

②、可以在类上透明地公开数据,其中数据实际是从某个其他源(如数据库)检索到的;

③、可以在数据发生更改时采取措施,例如引发事件或更改其他字段的值。

3、看类的生命周期方法

主要看类在其生命周期的各个阶段做了什么?

包括构造函数、析构函数、Unity的生命周期函数、重写的父类的生命周期方法。

4、看类重写的父类的方法。

5、看类实现的接口。

6、看类的常规方法

先看暴露给外部的public方法。再看自身细节private方法。

7、看类的关联类

了解关联类具备怎样的功能?

看关联类如何与本类协作?

看关联类与本类共同实现了怎样的功能?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NRatel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值