什么是 C# 中的命令对象
本文关键字:命令 对象 什么 | 更新日期: 2023-09-27 17:56:58
我的软件工程课(CS322)有这个作业,我们需要在堆栈上使用"简单命令对象",以便为我们的电子表格应用程序实现撤消/重做(撤消/重做单元格背景颜色更改和文本更改)。
在今天之前,我从未听说过命令对象。我一直在互联网上寻找,并缩小了我对命令对象的理解,本质上是
"对象用于表示和封装以后调用方法所需的所有信息"(维基百科)。
所以对我来说,我到底想做什么是有意义的,但我对这样一个对象的实现真的一无所知。
C# .NET 是否有任何可以从中派生的命令对象的默认实现? 命令对象和仅使用存储先前值的 Node 之间有什么区别?
我建议您从阅读命令设计模式开始
http://en.wikipedia.org/wiki/Command_pattern
http://visualstudiomagazine.com/articles/2012/04/10/command-pattern-in-net.aspx
C# 中没有真正的"命令对象"。
在我的书中,要成为一个命令,一个实体必须是语言的一部分。
因此,命令对象将在语言中保存一个"句子"。这可以是一种图形语言,像Logo这样的正式语言,也可以是非正式的,就像你设计编写图形程序的东西一样。这里的命令对象可以是类似 Draw a Circle of Size r at Point m with Pen p
或 Set the current brush to color c
的东西。
对于您的项目,它可能是像'Color a cell c in the sheet with backcolor b'
或Put text t into Cell c.
或Calculate formula f for Cells <c> and pt the result into cell r
之类的东西。
撤消/重做堆栈可以存储命令或状态。仅当命令可以反转(如果包含有关上一个状态的一些信息,如最后一个颜色)或可以通过从已知开始(或从快照)重做所有命令来推断最后一个状态时,前者才有效。
或者它们存储的状态可能是也可能不是昂贵或复杂的。
在编写代码之前,您应该澄清实际情况:构成语言的最小卡曼德集是什么。您可能拥有/想要处理的最大扩展数是多少。
您应该编写所有命令词及其参数的列表。在写下Specs.
之前不要编写任何代码 在最近的Build会议上,关于"程序员的思考"的一次很好的演讲中,反复出现的主题是"要写好的程序,你必须思考,为了思考,你必须写。规格。如果你不这样做,你可能会认为你在想,但你不是。
到达那里后,您可以创建一个命令类,该类将保存命令类型,值等参数以及必须调用的一个或多个委托/操作才能完成实际工作。
或者你可能决定堆叠状态,但那将不是一个真正的命令对象堆栈。