そんなクラスがあります。
public class Step<T>
{
public delegate void Act<T>();
Act<T> _act;
public Step(Act<T> action)
{
Contract.Requires(action != null);
_act = action;
}
public void PerformStep()
{
_act.Invoke();
}
}
私の問題は次のとおりです。このクラスのコンストラクターが、クラスに表示される定義を持つデリゲートを受け入れることができるようにしたいと考えています。私が望んでいないのは、そのデリゲートが私のクラスのパブリック メンバーになることです。これに代わる方法は、クラスの外部にパブリックデリゲートを持ち、他のクラスは必要としませんが、このクラスはそれを必要とすることです。デリゲートを非公開にする方法はありますか?
その解決策が不可能な場合、代替手段はありますか? このステップ クラスは、順次実行されるデリゲートの単なるラッパーです。より一般的な解決策があれば、署名は必要ありません。
編集: 明確化のための詳細情報。
このクラスの目的は、ユーザーが次のようなことを行えるようにすることです。
クラスカーがあれば。この車には、Drive、Stop、Turn などのメソッドがあります。この Step クラスを使用すると、クラスのユーザーはクラスのインスタンスを作成して、次のことを実行できるはずです。
Car c = new Car();
Step<Car> step1 = new Step<Car>(c.TurnLeft);
Step<Car> step2 = new Step<Car>(c.Drive);
Step<Car> step3 = new Step<Car>(c.TurnRight);
//add steps to a collection
c.AddNewRoutine(collection of steps);
c.RunRoutine(identify which routine);
ステップは、順番に実行できるようにするデータ構造に追加されます。car クラスには、これらのステップのグループを保持できるデータ構造が含まれます。これにより、任意のクラスを作成し、クラスまたはメイン プログラムで動作をハードコーディングすることなく、そのクラスが実行する手順をユーザーに設定させることができます。
終わる。ステップクラスをそのままにする必要があります。それを必要とする唯一のクラスは Step クラスであるため、どのような形式でもそのデリゲートへのパブリックアクセスを許可したくありません。