1

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

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

当我调用 Enabler 的方法时出现问题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

有没有办法做到这一点?

就像可以做 a 一样this[],是否也可以做 a this()of sorts?

4

2 回答 2

3

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

“Toggler”或更冗长的东西呢?

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

于 2013-04-02T09:17:03.587 回答
2

只需调用该方法ActivateExecute

并有两个实例

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

enable.Activate()

disable.Activate()

我也觉得 enabler 是一个糟糕的类名。

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

您应该命名它StatusChanger或任何适合您的应用程序的名称。

另外,您为什么不只有两种方法,enable并且disable

于 2013-04-02T09:16:51.227 回答