Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建一个使用c#中的对象名的方法?_C#_Object_Methods - Fatal编程技术网

如何创建一个使用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
,但是我想,如果没有这两个方法的话,这是因为它应该在构造函数中使用的布尔值发生变化时切换,我知道我应该使用函数来实现类似的功能,但是这个示例还是使用了伪代码。。。