クラスのすべてのインスタンスで同じデリゲートの大きな静的配列があります。インスタンスメソッドへの参照を配列に入れたい、つまりインスタンスデリゲートを開く。コンパイラでエラーが発生します。それ、どうやったら出来るの?
コード例:
public class Interpreter
{
// >7 instance fields that almost all methods need.
private static readonly Handler[] Handlers = new Handler[]
{
HandleNop, // Error: No overload for `HandleNop` matches delegate 'Handler'
HandleBreak,
HandleLdArg0,
// ... 252 more
};
private delegate void Handler(Interpreter @this, object instruction);
protected virtual void HandleNop(object instruction)
{
// Handle the instruction and produce a result.
// Uses the 7 instance fields.
}
protected virtual void HandleBreak(object instruction) {}
protected virtual void HandleLdArg0(object instruction) {}
// ... 252 more
}
私が検討したいくつかのアイデア: すべてのインスタンス フィールドをパラメーターとして提供しますが、これはすぐに扱いにくくなります。各インスタンスのハンドラーのリストを初期化しますが、これはパフォーマンスを大幅に低下させます (このクラスの多くのインスタンスが必要です)。