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

本文关键字:对象 方法 一个 创建 | 更新日期: 2023-09-27 18:07:05

假设我有一个名为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

更有意义

有办法做到这一点吗?

就像可以做this[]一样,是否也可以制作各种this() ?

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

恐怕这样做是不可能的。但是如果你可以禁用和启用你的"Enabler"类,"Enabler"可能不是正确的名称。

"Toggler"或者更冗长的名字怎么样?

编辑:@Nahum的回答也是一个很好的提示。要获得易于维护的代码,您应该同时更改imo.

直接调用ActivateExecute方法

有两个实例

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

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

你的类处理启用和禁用,从你的类名不清楚它做什么。

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

为什么不使用enabledisable这两个方法呢?