【问题标题】:How do I make a method that uses the object name in c#?如何在 c# 中创建一个使用对象名称的方法?
【发布时间】:2013-03-23 12:29:24
【问题描述】:

假设我有一个名为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() 之类的?

【问题讨论】:

  • Enable()的参数类型是什么?
  • 有 2 种方法会更有意义,1 用于启用,1 用于禁用。然后通过合理的命名,您可以拥有:BooleanTest.Enable(/*Enable Something*/);BooleanTest.Disable(/*Disable Something*/); 然后测试主机将始终拥有这两种方法,其中一种方法是逆向测试。
  • @JamesB 否,因为它应该在cond 更改时切换,就像如果开始条件为假时 if 跳过代码,如果构造函数中的条件为假,Enabler 会跳过代码

标签: c# object methods


【解决方案1】:

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

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

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

【讨论】:

  • 是的,感谢您的命名想法,但毕竟它只是一个示例类
【解决方案2】:

只需调用方法ActivateExecute

并且有两个实例

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

enable.Activate()

disable.Activate()

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

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

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

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

【讨论】:

  • 听起来很合理,我想用Invoke而不是Activate,但我想也可以
  • 至于没有这两种方法是因为它应该在构造函数中使用的布尔值更改时切换,我知道我应该使用类似的函数,但示例使用伪代码无论如何...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-29
  • 2011-01-20
  • 2010-10-05
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 2019-07-29
相关资源
最近更新 更多