首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将“操作”分配给对象

将“操作”分配给对象
EN

Stack Overflow用户
提问于 2012-03-06 21:14:43
回答 2查看 85关注 0票数 1

我正在开发一个库,其中有两组类:

A)几个已经用代码编写的类,这些类有一堆函数或“动作”

B)一些在实例化时必须“配置”的类,以便使用我的库的用户可以实例化第二组类中的对象,并“分配”第一组中的操作

现在我使用的是委托,如下所示:

在代码中,我声明了一些A和B使用的委托:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public delegate void Action03(int value);

然后我在组A中实现了“操作”:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public Delegates.Action03 DoSomething03 = delegate(int value) { [code to execute when this action is specified on the constructor] };

最后,我们使用下面这样的构造函数来实例化来自组B的对象,在组B中,我们将所需的委托/操作作为参数进行传递:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public SomethingGroupB(Delegates.Action03 act03) { ... }

当然,我们可以实例化作为参数传递委托的对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SomethingGroupB somthg1 = new SomethingGroupB(GrpA01.DoSomething03);

但重点是,我们可以实例化类似的对象,但分配不同的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SomethingGroupB somthg2 = new SomethingGroupB(GrpA07.DoSomething03);
SomethingGroupB somthg3 = new SomethingGroupB(GrpA01.DoSomething01);
SomethingGroupB somthg4 = new SomethingGroupB(GrpA02.DoWhatever);

所以..。总而言之,我希望预编码(在我的库中)操作,并且用户必须在实例化新对象时选择分配给它的操作,并且这些操作不会改变。

我想我也可以用事件来做这件事,但我不需要添加和删除“动作”,它们在每个类型B的对象的整个生命周期内都是固定的。

所以我的问题是:有没有比我用委托实现的解决方案更好、更好、更干净的解决方案呢?

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-06 21:25:11

所以我的问题是:有没有比我用委托实现的解决方案更好,更好,更干净的解决方案?

我建议的一个改进是使用框架中定义的委托,而不是定义自己的委托。例如,您的Action03委托只是一个System.Action。这将在使API更容易被发现方面提供更多的可用性。

也就是说,这是在有效地使用委托来实现Strategy pattern。如果这提供了您所需的全部功能,那么在这里它可能是一个很好的选择,而且相当干净。

票数 2
EN

Stack Overflow用户

发布于 2012-03-06 21:23:19

我认为委托是唯一的选择。

也许你也可以使用装饰器模式,如果它适合你的需要?它非常干净,因为它是一种模式,它的标准,并且“易于”理解,因为它在某种程度上是规范化的。

难道不能想出其他的方法吗?也许可以避免大量使用对象组合(然后在运行时将对象链接在一起,这可能会更简单一些?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9592023

复制
相关文章
SD模块基础教程(三十九):将收货方分配给订货方
声明:本文章仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP软件,相应著作权归SAP所有。)
齐天大圣
2021/02/24
4730
SD模块基础教程(十二):将工厂分配给销售组织/分销渠道
声明:本文章仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP软件,相应著作权归SAP所有。)
齐天大圣
2021/02/24
5370
SD模块基础教程(十一):将销售组分配给销售办公室
声明:本文章仅用于SAP软件的应用与学习,不代表SAP公司。(注:文中所示截图来源SAP软件,相应著作权归SAP所有。)
齐天大圣
2021/02/24
7350
[jQuery笔记] jQuery对象操作
<!doctype html> <html> <head> <meta charset="utf-8"> <title>对象操作的使用</title> <script src="js/jquery-1.8.3.min.js"></script> </head> <body> // 加载图片 <img src="img/ftj.jpg" height="300" width="500"> <sc
行 者
2019/12/10
1.4K0
如何将两个数组对象的相同属性进行操作
合并数组,然后通过obj[v.name]=obj[v.name]===undefined)判断其条件,将两个数组对象的相同属性将对应的type变为1。
马克社区
2022/07/11
4.1K0
【C++】匿名对象 ② ( 将 “ 匿名对象 “ 初始化给变量 | 将 “ 匿名对象 “ 赋值给变量 )
" 匿名对象 " 的 作用域 仅限于其所在的 表达式 , 这句表达式 执行完毕后 , 匿名对象 自动销毁 ;
韩曙亮
2023/10/15
3940
【C++】匿名对象 ② ( 将 “ 匿名对象 “ 初始化给变量 | 将 “ 匿名对象 “ 赋值给变量 )
[ASP.NET Core 3框架揭秘] 配置[4]:将配置绑定为对象
虽然应用程序可以直接利用通过IConfigurationBuilder对象创建的IConfiguration对象来提取配置数据,但是我们更倾向于将其转换成一个POCO对象,以面向对象的方式来使用配置,我们将这个转换过程称为配置绑定。配置绑定可以通过如下几个针对IConfiguration的扩展方法来实现,这些扩展方法都定义在NuGet包“Microsoft.Extensions.Configuration.Binder”中。
蒋金楠
2019/12/16
9850
[ASP.NET Core 3框架揭秘] 配置[4]:将配置绑定为对象
面向对象(二十)-文件操作
项目中的文件操作,要求将项目中添加的文件放到项目输出目录下。 首先将文件拖拽到项目目录下。然后如下操作:
孙寅
2020/06/02
4340
PDO操作大数据对象
一般在数据库中,我们保存的都只是 int 、 varchar 类型的数据,一是因为现代的关系型数据库对于这些内容会有很多的优化,二是大部分的索引也无法施加在内容过多的字段上,比如说 text 类型的字段就很不适合创建索引。所以,我们在使用数据库时,很少会向数据库中存储很大的内容字段。但是,MySQL 其实也为我们准备了这种类型的存储,只是我们平常用得不多而已。今天我们就来学习了解一下使用 PDO 如何操作 MySQL 中的大数据对象。
硬核项目经理
2020/12/14
7340
js bom操作----Screen对象
window.screen对象在编写时可以不使用 window 这个前缀。 一、窗口的文档显示区的宽高 console.log(window.innerWidth,window.innerHeight);//3072 1438 二、返回一个窗口的外部宽高,包括所有界面元素(如工具栏/滚动条) console.log(window.outerWidth,window.outerHeight);//1536 824 三、屏幕的总宽高 console.log(screen.width,screen.heigh
IT工作者
2022/03/14
8550
java操作redis: 将string、list、map、自定义的对象保存到redis中
import java.util.HashMap; import java.util.List; import java.util.Map; import redis.clients.jedis.Jedis; public class redis { public static void main(String[] args) { // 连接redis服务 Jedis jedis = new Jedis("127.0.0.1", 6379); // 密码验证-如果你没有设置redis
似水的流年
2019/12/06
1K0
java操作redis: 将string、list、map、自定义的对象保存到redis中
import java.util.HashMap; import java.util.List; import java.util.Map; import redis.clients.jedis.Jedis; public class redis { public static void main(String[] args) { // 连接redis服务 Jedis jedis = new Jedis("127.0.0.1", 6379); // 密码验证-如果你没有设置redis
似水的流年
2018/01/14
3.9K0
java操作redis: 将string、list、map、自定义的对象保存到redis中
import java.util.HashMap; import java.util.List; import java.util.Map; import redis.clients.jedis.Jedis; public class redis { public static void main(String[] args) { // 连接redis服务 Jedis jedis = new Jedis("127.0.0.1", 6379); // 密码验证-如果你没有设置redis
似水的流年
2018/01/18
5.9K0
[C#1] 4-通用对象操作
1.对象的等值性和唯一性 Object的Equals[虚]方法判断两个对象是否相等; Object.ReferenceEquals判断两个对象是否指向同一引用[严格意义上的相等、对象的唯一性]。 2.对象的散列码 Object的GetHashCode[虚]方法返回一个Int32类型的散列码,当重写Equals方法而没有重写GetHashCode方法时编译器会提示一个警告信息。 3.对象克隆 一个类必须自己确定是否允许被克隆,如果允许则应该实现IConeable接口,该接口定义一个方法Clone方法,实现该方
blackheart
2018/01/19
6480
字符串对象操作
获取一个或者多个Unicode代码对应原生字符串  String.fromCharCode('unicode代码')
十月梦想
2018/08/29
6260
将后台返回字符串数据转为jquery对象,并做一些操作
在 web 开发中,经常会有后台返回 html 字符串的情况,需要在 js 里将其 转为 juery 对象或者 DOM 并做一些处理,下面这是我在实际中遇到的一点问题,记录一下。
全栈程序员站长
2022/07/05
6550
将JavaBean对象转换为Map集合
使用jackson-databind可以将JavaBean对象属性转换为Map集合。
编程随笔
2022/04/29
1.7K0
javascript将字符串转为对象
javascript将字符串转为对象 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script> var keyword = window.location.search.substring(1); // 取查询字符串 var pos = keyword.indexOf('=');
用户1719978
2018/07/05
9960
XStream将XML映射到对对象
该文介绍了如何利用XStream框架对XML文件进行解析和处理,并基于此框架实现一个简单的Java对象序列化和反序列化程序。
用户1171305
2017/12/28
9380
jackson将json转换为json对象
高久峰
2023/07/02
3340

相似问题

将操作分配给UIPickerView中的单个对象

21

操作对象的属性:将方法分配给属性

12

将操作分配给变量

10

将操作分配给QMenu项目

115

将父对象分配给对象

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文