假设我有一个名为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()
种类?
答案 0 :(得分:3)
afaik不可能做这样的事情。但是如果您可以使用“启动器”类禁用和启用,则“启动器”可能不是正确的名称。
“Toggler”或更冗长的东西怎么样?
编辑:@Nahum的答案也是一个很好的提示。要拥有可维护良好的代码,您应该更改两个imo。
答案 1 :(得分:2)
只需调用方法Activate
或Execute
并有两个实例
Enabler enable= new Enabler(cond);
Enabler disable = new Enabler(!cond);
enable.Activate()
disable.Activate()
此外,我觉得启动器是一个糟糕的类名。
您的班级处理启用和禁用它不会从您的班级名称中清楚它的作用。
您应该将其命名为StatusChanger
或任何适合您的应用程序。
另外,为什么你不只是有两种方法,enable
和disable
?