C#中的命令对象是什么?

C#中的命令对象是什么?,c#,object,command,C#,Object,Command,我的软件工程类(CS322)有一个任务,在这个任务中,我们需要在堆栈上使用“简单命令对象”,以便实现电子表格应用程序的撤销/重做(撤销/重做单元格背景颜色更改和文本更改) 在今天之前,我从未听说过命令对象。我一直在环顾互联网,并缩小了我对命令对象的理解范围,因为它本质上是一个“对象,用于表示和封装以后调用方法所需的所有信息”(wikipedia) 所以我想做什么对我来说是有意义的,但是我对这个对象的实现几乎一无所知 C#.NET是否有任何可以派生的命令对象的默认实现?命令对象与简单使用存储先前值

我的软件工程类(CS322)有一个任务,在这个任务中,我们需要在堆栈上使用“简单命令对象”,以便实现电子表格应用程序的撤销/重做(撤销/重做单元格背景颜色更改和文本更改)

在今天之前,我从未听说过命令对象。我一直在环顾互联网,并缩小了我对命令对象的理解范围,因为它本质上是一个“对象,用于表示和封装以后调用方法所需的所有信息”(wikipedia)

所以我想做什么对我来说是有意义的,但是我对这个对象的实现几乎一无所知


C#.NET是否有任何可以派生的命令对象的默认实现?命令对象与简单使用存储先前值的节点有什么区别?

我建议您从阅读命令设计模式开始

C#中没有真正的“命令对象”

在我的书中,要成为命令,实体必须是语言的一部分

因此,命令对象将在语言中包含一个“句子”。这可以是一种图形语言,像Logo这样的正式语言,也可以像你为编写图形程序而设计的东西那样的非正式语言。在这里,命令对象可能类似于
使用钢笔p在点m处绘制一个大小为r的圆,或者
将当前画笔设置为颜色c

对于您的项目,它可能类似于
“用背景色b给工作表中的a单元格c上色”
将文本t放入单元格c。
计算单元格的公式f并将结果放入单元格r

撤消/重做堆栈可以存储命令或状态。前者仅在命令可以反转(如果包含有关上一个状态的某些信息,如最后一种颜色)或通过从已知开始(或从快照)重做所有命令来推断上一个状态时才起作用

或者它们存储的状态可能昂贵,也可能不复杂

在编写代码之前,您应该澄清实际情况:构成语言的最小命令集是什么。您可能拥有/想要处理的最大扩展是什么

你应该写一个所有命令词及其参数的列表。在写下
规范之前,不要编写任何代码。
在最近的构建会议上的一次精彩演讲中,反复出现的主题是“编写好的程序,你必须思考,为了想你必须编写。规范。如果你不这样做,你可能会认为你在思考,但你不是。”

一旦到了那里,就可以创建一个命令类,该类将保存命令类型、值等参数,以及一个或多个必须调用以执行实际工作的委托/操作

或者,您可能决定堆叠状态,但那并不是真正的命令对象堆栈