C#初心者です。C#で決まった処理をラップした関数を作りたいのですが、方法があれば教えて頂きたいです。

補足

伝わりにくくてすみません。 WrapA()の目的は「関数B()を実行する前に必ずA()を先に実行する」ことです。逆に言うと、A()を事前に実行したい関数は必ずWrap()に入れて呼びたいです。 ややこしくなると思って簡略化して書いたのですが、本当にやりたいことは、A()、B()を実行した後にさらにC()を実行します。 A()で状態を一時的に変化させ、B()を実行後、C()で状態を復元するということがしたいです。 void WrapA(B()) { A(); // 状態をバックアップ B(); // 状態を変更して、別の特定の処理を行う。 C(); // 状態を復元 } delegate、Action辺りでそれっぽいことができるかと思ったのですが、関数B()の引数の型が、入れる関数によって変わるので無理かなと思い、何か手法があればご教示頂きたい次第です。

C言語関連99閲覧

ベストアンサー

1

1人がナイス!しています

ThanksImg質問者からのお礼コメント

まさに私がやりたかったことです!ありがとうございます!

お礼日時:9/25 23:24

その他の回答(3件)

0

いまいち何をしたいのかが分からないけど。 Bをオブジェクトにすればよいのでは。 そして、Bの中にB()の内容を実装した、メソッドを付ける。 引数や返り値はメソッドに直接渡すのでは無く、Bのプロパティで渡しておくとか。

B()の形が定まらない以上、出来る事は、B()を呼び出す事だけです。 それ以上の事は、その時々のB()の形を知っているB()自身に自分で判断してもらうしか無いです。 そして、A()の引数に特定のB()を渡したいという事は、 A()を呼び出す側もまた、B()の形は知っているのですよね? ならば、そちら側でB()実行のための下準備をしてもらうしか無いです。 A()は、引数で渡されるだけでB()の素性は知らないし、何を渡すかだって知らないのですから。

0

Bが「引数や戻り値の型が不定な関数」だとしたら、WrapAはどうやってBを呼び出したらいいのでしょう。引数はなしで呼び出し、戻り値は無視する以外に方法はないですよね。