Hello,大家好,又见面了。不知道什么时候才能添加评论~嗯,所以,有事儿可以知乎(https://www.zhihu.com/people/liu-xia-80/activities) 上找,但是我也不能保证及时回复~x_x。
我改了以下模板,代码风格换成了 light。因为不严谨的研究显示,长期看暗风格的代码在保护眼睛的同时心情可能会变得郁闷。而且对于手机用户并不是很友好。
我们还是先来看看上一期的问题吧。
上一期的问题解答
我们还是要把问题贴一下。这样大家就不用来回翻了(我真是个好人)。上一期的问题是有一个介绍加入非法组织的代理:
加入组织的代码如下:
其中(1)和(2)是两种不同的实现,每次只能选择其一。那么(1)和(2)的输出分别是什么呢?
这道题目里面埋了几个坑,我们一起分析一下。对于(1),也就是:
我们先得分清楚,谁是谁。首先 指的是参数(argument),而不是 字段(field)。而同理 也是参数。由于 是用 ByRef 的参数传递,因此 真正的改变了传入的 引用。因此第(1)种情况下,你顺利的加入了“晓”这个组织。
然后我们再来看看(2)
首先 是字段(field),并且就是一个普通的引用。那么问题就在于 这个操作对于委托(delegate)来说到底是一个修改,还是创建一个新的对象了。来 Reference:
https://docs.microsoft.com/en-us/dotnet/api/system.delegate?view=netframework-4.7.2
Delegates are immutable; once created, the invocation list of a delegate does not change.(Delegate 是一个不可变的对象。一旦创建,其调用列表就不会再改变了。)
因此, 操作不是一个更新操作。那么显然(2)什么都不会输出。这个坑很有意思,很多老手一不小心也能栽进去。看来组织也不是随便进的。
本期的题目
假设我们要放飞自我,就要做只鸟。但是是一个有些复杂的鸟。首先我们有接口:
然后我们供奉了祖宗
最后,到了我们自己这一代,飞这件事情搞得有点复杂:
你猜,以下程序的输出是什么呢?(温馨提示:正确的食用姿势是先用我们的神经网络运行一下这个程序,然后再上机器验证。不过基本上你现在应该在地铁上/餐馆里…身边没有电脑,我也是多虑了)
领取专属 10元无门槛券
私享最新 技术干货