Command模式是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。在C#编程中,利用.NET框架的特性,如委托和泛型,我们可以优雅地实现Command模式。 我们来理解Command模式的基本结构。模式包含以下几个角色: 1. **Command**(命令):声明一个接口,用于接收执行请求的方法。 2. **ConcreteCommand**(具体命令):实现了Command接口,知道如何接收请求并调用接收者的相应操作。 3. **Invoker**(调用者):持有Command对象并调用其Execute方法来执行请求。 4. **Receiver**(接收者):知道如何执行与请求相关的操作。 在C#中,我们可以使用委托作为Command接口的实现,因为它可以表示一个方法调用。例如: ```csharp public delegate void Command(object parameter); ``` 接下来,创建具体的命令类,如`ConcreteCommandA`和`ConcreteCommandB`,它们分别实现特定的功能: ```csharp public class ConcreteCommandA : Command { private Receiver _receiver; public ConcreteCommandA(Receiver receiver) { _receiver = receiver; } public override void Execute(object parameter) { _receiver.ActionA(parameter); } } public class ConcreteCommandB : Command { private Receiver _receiver; public ConcreteCommandB(Receiver receiver) { _receiver = receiver; } public override void Execute(object parameter) { _receiver.ActionB(parameter); } } ``` 接收者类`Receiver`包含命令需要执行的具体操作: ```csharp public class Receiver { public void ActionA(object parameter) { // 执行操作A } public void ActionB(object parameter) { // 执行操作B } } ``` 调用者`Invoker`持有命令对象并调用`Execute`方法: ```csharp public class Invoker { private Command _command; public void SetCommand(Command command) { _command = command; } public void ExecuteCommand() { _command.Execute(null); // 可以传递参数 } } ``` 现在,你可以根据需求创建不同的具体命令实例,并在调用者中设置它们: ```csharp public static void Main(string[] args) { Receiver receiver = new Receiver(); Invoker invoker = new Invoker(); invoker.SetCommand(new ConcreteCommandA(receiver)); invoker.ExecuteCommand(); // 执行操作A invoker.SetCommand(new ConcreteCommandB(receiver)); invoker.ExecuteCommand(); // 执行操作B } ``` 至于泛型,它允许Command模式更加灵活。通过定义泛型委托,你可以创建能处理不同类型命令的通用命令接口。例如: ```csharp public delegate void GenericCommand(T parameter); ``` 这样,`ConcreteCommandA`和`ConcreteCommandB`可以修改为接受特定类型参数: ```csharp public class ConcreteCommandA : GenericCommand { private Receiver _receiver; public ConcreteCommandA(Receiver receiver) { _receiver = receiver; } public override void Invoke(T parameter) { _receiver.ActionA(parameter); } } // 类似地,为ConcreteCommandB实现 ``` 通过这种方式,Command模式在C#中的实现结合了.NET的委托和泛型,使得代码更加灵活、易于扩展和维护。同时,提供的示例代码如`Command_Demo.zip`、`Command_cs.zip`和`An-implementation-of-Command-pattern-in-C.pdf`将提供更深入的实践理解和应用案例。
2024-11-28 16:20:47 175KB Windows .NET WinXP Win32
1
SharpFont.HarfBuzz C#的跨平台HarfBuzz绑定 快速开始 NuGet SharpFont.HarfBuzz在上可用。 可以通过在软件包管理器控制台中发出以下命令来安装它: PM> Install-Package SharpFont.HarfBuzz 从来源 将存储库克隆到您的计算机。 如果拉动,请确保更新子模块git submodule update --init --recursive 编译位于Source目录中的SharpFont.HarfBuzz.sln。 执照 SharpFont.HarfBuzz是根据。 Copyright (c) 2014-2016 Robert Rouhani and other contributors (see CONTRIBUTORS file). Permissio
2024-07-22 15:46:40 1.35MB
1
matlab洛伦兹代码洛伦兹·德鲁德(Lorentz)DrudeMaterialFit C#中的遗传算法用于将材料折射率数据拟合到Lorentz-Drude色散模型。 可以在GATest / test.cs中更改输入文件(制表的lambda,n,k文本文件)和算法参数。 Matlab代码可以生成数字并与分析模型进行比较,以计算剩余的适应性误差。
2024-06-18 19:58:35 24KB 系统开源
1
汽车销售系统 一个使用C#和.NET开发的提供二手车销售的网站, 使用script.sql访问数据库。 可能需要在Web.config中编辑connectionStrings才能正确连接。
2024-05-23 14:07:20 59.7MB JavaScript
1
Documentação 可以从Web应用程序的C#和SQLServer中访问CRUD。 要求 视觉工作室 SQL服务器 邮差 SQL服务器 Acesse / Abra o SQLServer Management ,信用银行作为demais指令执行。 create database smartphone use smartphone create table model ( spId int identity(1,1), spNameModel varchar(500), spNameBland varchar(500), spPrice float ) insert into model values ('Iphone XR', 'Apple', 2200.00) select * from model OBS:通过移动电话进行认证的银行智能手机 视觉工作室 OBS:安装V
2024-05-16 17:00:06 1.55MB
1
C#中的3D容器包装 这是一个C#库,可用于查找3D容器包装解决方案(也称为3D箱包装)。 它包括EB-AFIT打包算法的实现,该算法最初是由美国空军技术学院(AFIT)的ErhanBaltacıoğlu(EB)于2001年作为硕士论文开发的。该算法在《发行商的三维托盘》中也有描述包装问题:基于人类智能的启发式方法,作者:ErhanBaltacıoğlu,James T. Moore和Raymond R.Hill Jr.,于2006年发表在《国际运筹学杂志》上(第1卷,第3期)。 EB-AFIT算法支持整个项目轮换,并具有出色的运行时性能和容器利用率。 用法 首先在解决方案中包含ContainerPacking项目。 创建一个Container对象列表,该列表描述了容器的尺寸: List containers = new List();
2024-04-16 17:12:10 455KB
1
数据结构(C#语言版) 数据结构(C#语言版)
2024-02-14 10:59:01 1.65MB 数据结构(C#语言版)
1
c#实现p2p通讯的源代码,c#实现p2p通讯的源代码
2023-12-12 05:04:29 132KB c#,实现p2p通讯,源代码
1
CSCore-.NET音频库 CSCore是一个完全用C#编写的免费.NET音频库。 尽管它仍然是一个相当年轻的项目,但它提供了许多功能,例如播放或捕获音频,对许多不同的编解码器,效果进行编码或解码等等! CSCore基于一个非常可扩展的体系结构,它使您无需花费大量精力即可使其满足您的需求。 您可以建立音乐播放器,语音聊天,录音机等! 支持的平台:仅Windows,Linux和Mac实验性平台(请参阅 )。 有关更多详细信息,请查看源代码或。 随意下载或克隆源代码: https://github.com/filoe/cscore.git 您可能更喜欢安装: Install-Pack
2023-10-25 15:38:42 55.63MB audio dotnet audio-library .NETC#
1
使用C#源码调用google的搜索服务的元代码,可以参考一下
2023-09-23 06:01:03 132KB C# 搜索 源码
1