如何创建一个使用c#中的对象名的方法?
假设我有一个名为如何创建一个使用c#中的对象名的方法?,c#,object,methods,C#,Object,Methods,假设我有一个名为Enabler 我像往常一样创建了一个类的实例(在半伪c#代码中) 当我调用名为Enable的启用码方法时,问题就出现了,这与其说是一个问题,不如说是一个非常冗长的问题 enable.Enable(/*some code to enable*/); 当我这样做时,真正的问题出现了: Enabler disable = new Enabler(!cond); //reverse condition disable.Enable(/*some code to disable*/)
Enabler
我像往常一样创建了一个类的实例(在半伪c#代码中) 当我调用名为
Enable
的启用码方法时,问题就出现了,这与其说是一个问题,不如说是一个非常冗长的问题
enable.Enable(/*some code to enable*/);
当我这样做时,真正的问题出现了:
Enabler disable = new Enabler(!cond); //reverse condition
disable.Enable(/*some code to disable*/); //this makes no sense semantically
所以我在寻找一种方法来做这样的事情:
Enabler enable = new Enabler(cond);
Enabler disable = new Enabler(!cond);
// then simply call the method by the object name like this:
enable(/*something to enable*/); //uses the object name as the method name
disable(/*something to disable*/);
这使得加载在语义上比说disable.Enable更有意义
有没有办法做到这一点
就像可以做一个this[]
,也可以做一个this()
排序吗?只需调用方法Activate
或Execute
有两个例子
Enabler enable= new Enabler(cond);
Enabler disable = new Enabler(!cond);
enable.Activate()
disable.Activate()
我还觉得enabler是一个不好的类名
您的类同时处理启用和禁用。从类名中不清楚它是做什么的
您应该将其命名为StatusChanger
或任何适合您的应用程序的名称
还有,为什么不使用两种方法,启用
和禁用
?只需调用方法激活
或执行
有两个例子
Enabler enable= new Enabler(cond);
Enabler disable = new Enabler(!cond);
enable.Activate()
disable.Activate()
我还觉得enabler是一个不好的类名
您的类同时处理启用和禁用。从类名中不清楚它是做什么的
您应该将其命名为StatusChanger
或任何适合您的应用程序的名称
还有,为什么不使用两种方法,启用
和禁用
?好吧,这样做是不可能的。但是,如果您可以使用“Enabler”类禁用和启用,“Enabler”可能不是正确的名称
“Toggler”或更详细的东西怎么样
编辑:@Nahum的回答也是一个很好的暗示。要获得可维护性好的代码,您应该同时更改imo和imo。如果这样做是不可能的。但是,如果您可以使用“Enabler”类禁用和启用,“Enabler”可能不是正确的名称
“Toggler”或更详细的东西怎么样
编辑:@Nahum的回答也是一个很好的暗示。要使代码具有良好的可维护性,您应该同时更改imo。启用(
)的参数类型是什么?最好有两种方法,一种用于启用,一种用于禁用。然后,使用合理的命名,您可以拥有:booleanstest.Enable(/*Enable Something*/)代码>和booleanstest.Disable(/*禁用某物*/)代码>然后测试主机将始终拥有两个方法,其中一个方法是反向测试。@JamesB否,因为它应该在cond
更改时切换,就像if在开始条件为false时跳过代码一样,如果构造函数中的条件为false,Enable()
的参数类型是什么?Enable()的参数类型是什么?最好有两种方法,一种用于启用,一种用于禁用。然后,使用合理的命名,您可以拥有:booleanstest.Enable(/*Enable Something*/)代码>和booleanstest.Disable(/*禁用某物*/)代码>然后测试主机将始终拥有两个方法,其中一个方法是反向测试。@JamesB否,因为它应该在cond
更改时切换,就像if在开始条件为false时跳过代码一样,如果构造函数中的条件为false,Enabler
会跳过代码。谢谢你的命名思想,但它只是一个示例类。谢谢你的命名思想,但它只是一个示例类。听起来很合理,我想用Invoke
代替Activate
,但是我想,如果没有这两个方法,那么这是因为它应该在构造函数中使用的布尔值发生变化时切换,我知道我应该使用函数来实现类似的功能,但是这个示例使用了伪代码……听起来很合理,我想用Invoke
而不是Activate
,但是我想,如果没有这两个方法的话,这是因为它应该在构造函数中使用的布尔值发生变化时切换,我知道我应该使用函数来实现类似的功能,但是这个示例还是使用了伪代码。。。