1

というクラスがあると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()ますか?

4

2 に答える 2

3

このようなことはできません。ただし、「イネーブラー」クラスで無効化および有効化できる場合、「イネーブラー」はおそらく適切な名前ではありません。

「Toggler」またはもっと冗長なものはどうですか?

編集:@Nahumの答えも良いヒントです。コードを適切に保守するには、両方の imo を変更する必要があります。

于 2013-04-02T09:17:03.587 に答える
2

メソッドを呼び出すActivateか、Execute

2つのインスタンスがあります

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

enable.Activate()

disable.Activate()

また、イネーブラーは悪いクラス名だと思います。

あなたのクラスは、有効化と無効化の両方を処理します。クラス名からは、それが何をするのか明確ではありません。

名前を付けるStatusChangerか、アプリケーションに適した名前を付ける必要があります。

enableまた、2つのメソッドだけを持っていないのはなぜdisableですか?

于 2013-04-02T09:16:51.227 に答える