日期:2014-05-17  浏览次数:20935 次

请高手解释下这个委托如何执行的?
 public void UpdateContainer(Action<ContainerBuilder> action)
{
     var builder = new ContainerBuilder();            
     action.Invoke(builder); //感觉这一行是不是多余,这里起怎么作用?
     builder.Update(_container);
}

上面这个方法很经典,但action.Invoke(builder); 这一行感觉是多余的吧。为什么加这一行,有怎么作用。请高手解释下?

------解决方案--------------------
你为什么说它“很经典”呢?我不懂。

至于 action.Invoke(builder) 这句,action要使用builder作为参数调用一下,然后还要调用 builder.Update方法善后处理,builder变量要用两次,自然要写在两行里边。
------解决方案--------------------
如果你不了解这里为什么要new一个ContainerBuilder,那么就看上下文、以及看ContainerBuilder本身。

只有垃圾的代码才需要一堆注释,而读好的代码就好像学会游泳——你辈子也不会根本忘记这种技能。如果你认为它是“很经典”的,那么读源代码,不要只揪出3行代码就来问别人。

在我看来,如果只是这3行代码,那么它就是多余的繁琐冗长的。编程设计就是要简单、少创建class。

但是假设你放到一个复杂的产品、项目中,就不一样了。这时可能“不得不”作出复杂的设计。但是这要读懂上下文源代码。千万不要死记硬背3行代码就邯郸学步地随声附和别人的吹捧而说它是“很经典”的。
------解决方案--------------------
把更新容器控件的代码放入委托,由调用者定义,在这个函数中执行,怎么叫没有用。
------解决方案--------------------
是啊。怎么叫“没有意义”。