我在C#工作了几年,有一件事总是让我烦恼.代表们.它们没有状态,它们是对象方法的指针,是处理线程或.net必须提供的任何其他类型的并行编程技术时唯一的方法.
我主要担心的是,当以面向对象的方式编程时,代表通过打破如果你去面向对象的概念打破范式这一事实,那么使用UML和CRC的设计阶段应该映射到你使用的语言.
正如标题所要求的那样,代表是真实对象还是编程异常,需要在面向对象设计范围之外完成.
因此,如果一个对象没有状态并且委托可以用UML建模,那么它是否可能成为一个对象?
一位知名人士曾就天文学进行过公开讲座.他描述了地球如何围绕太阳运行,以及太阳如何围绕着被称为银河系的大量恒星的中心轨道运行.讲座结束时,房间后面的一位小老太起身说道:"你告诉我们的是垃圾.这个世界实际上是一只支撑在巨龟背上的平板." 这位科学家在回答说:"乌龟站在什么地方?"你很聪明,年轻人,非常聪明",老太太说."但是乌龟一路走下来了!----斯蒂芬霍金斯
我认为这与物体及其所处的基本类型非常相关.你能真正说出它的物体吗?
duf*_*ymo 16
它们是真实的物体.
当您使用UML进行建模时,通常使用接口.他们有州吗?不,它们是否更少面向对象?当然不是.
当然,委托可以用UML建模.
我认为它们代表了一种更具功能性的方法,因为它们是作为第一类对象的函数.这可能会引起你的注意,但它并没有减损它们确实是物体的事实.
很明显,如果没有人使用闭合锤,这一点就无法实现.不,不是"关闭这个问题"的锤子.
Action @ICanHazState()
{
int callcount = 0;
Action retval = delegate {
System.MessageBox("I haz bin calld " + callcount.ToString() + " tims b4");
if (++callcount > 5) throw new InvalidOperationException("Call limit exceeded. Kaboom!");
};
return retval;
}
Run Code Online (Sandbox Code Playgroud)
更复杂的例子(需要C#4,例如Visual Studio 2010)
| 归档时间: |
|
| 查看次数: |
811 次 |
| 最近记录: |