请高手解释下这个委托如何执行的?

shuyisheng 2013-01-27 09:36:02
public void UpdateContainer(Action<ContainerBuilder> action)
{
var builder = new ContainerBuilder();
action.Invoke(builder); //感觉这一行是不是多余,这里起怎么作用?
builder.Update(_container);
}

上面这个方法很经典,但action.Invoke(builder); 这一行感觉是多余的吧。为什么加这一行,有怎么作用。请高手解释下?
...全文
150 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
shuyisheng 2013-01-27
谢谢了两位指导。看来我得全面看下委托,对这个不是很理解。结帖了。
  • 打赏
  • 举报
回复
threenewbee 2013-01-27
是啊。怎么叫“没有意义”。
  • 打赏
  • 举报
回复
shuyisheng 2013-01-27
UpdateContainer(x => { var serviceTypes = new List<Type> { service }; if (service.IsGenericType) { var temp = x.RegisterGeneric(implementation).As( serviceTypes.ToArray()).PerLifeStyle(lifeStyle); if (!string.IsNullOrEmpty(key)) { temp.Keyed(key, service); } } else { var temp = x.RegisterType(implementation).As( serviceTypes.ToArray()).PerLifeStyle(lifeStyle); if (!string.IsNullOrEmpty(key)) { temp.Keyed(key, service); } } }); 哦那个 action.Invoke(builder) 是执行的这个lambda的表达式吧? 是在调用的时候定义方法执行的内容是不是?感觉理解起来拐扭。
  • 打赏
  • 举报
回复
threenewbee 2013-01-27
把更新容器控件的代码放入委托,由调用者定义,在这个函数中执行,怎么叫没有用。
  • 打赏
  • 举报
回复
shuyisheng 2013-01-27
Action<ContainerBuilder> action 这个action是个无参无返回值的委托而已,又不是执行怎么方法,而是又把实例对象传进来了,下面调用方法还是用实例对象来调的,感觉不出多大意义。
  • 打赏
  • 举报
回复
如果你不了解这里为什么要new一个ContainerBuilder,那么就看上下文、以及看ContainerBuilder本身。 只有垃圾的代码才需要一堆注释,而读好的代码就好像学会游泳——你辈子也不会根本忘记这种技能。如果你认为它是“很经典”的,那么读源代码,不要只揪出3行代码就来问别人。 在我看来,如果只是这3行代码,那么它就是多余的繁琐冗长的。编程设计就是要简单、少创建class。 但是假设你放到一个复杂的产品、项目中,就不一样了。这时可能“不得不”作出复杂的设计。但是这要读懂上下文源代码。千万不要死记硬背3行代码就邯郸学步地随声附和别人的吹捧而说它是“很经典”的。
  • 打赏
  • 举报
回复
你为什么说它“很经典”呢?我不懂。 至于 action.Invoke(builder) 这句,action要使用builder作为参数调用一下,然后还要调用 builder.Update方法善后处理,builder变量要用两次,自然要写在两行里边。
  • 打赏
  • 举报
回复
相关推荐
发帖
C#

10.8w+

社区成员

.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
帖子事件
创建了帖子
2013-01-27 09:36
社区公告

让您成为最强悍的C#开发者