如何在c#中创建一个使用对象名的方法?

时间:2013-04-02 09:13:19

标签: c# object methods

假设我有一个名为Enabler的班级 我像往常一样创建了一个类的实例(在半伪c#代码中)

bool cond;
Enabler enable = new Enabler(cond);

当我调用启动器的方法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()种类?

2 个答案:

答案 0 :(得分:3)

afaik不可能做这样的事情。但是如果您可以使用“启动器”类禁用和启用,则“启动器”可能不是正确的名称。

“Toggler”或更冗长的东西怎么样?

编辑:@Nahum的答案也是一个很好的提示。要拥有可维护良好的代码,您应该更改两个imo。

答案 1 :(得分:2)

只需调用方法ActivateExecute

即可

并有两个实例

Enabler enable= new Enabler(cond);
Enabler disable = new Enabler(!cond);

enable.Activate()

disable.Activate()

此外,我觉得启动器是一个糟糕的类名。

您的班级处理启用和禁用它不会从您的班级名称中清楚它的作用。

您应该将其命名为StatusChanger或任何适合您的应用程序。

另外,为什么你不只是有两种方法,enabledisable