クラス(サードパーティによって作成および保守されている)を取得し、それを魔法のC#シュガーでラップして、各メンバー関数(またはそれ以上)をカスタムロックメカニズム(またはロギングメカニズムなど)でラップできるようにしたいです。
例えば、
class Foo { // someone else wrote this and I can't touch it.
void A() {}
void B() {}
// plus 10,000 other functions I don't want to know about
}
class WrappedFoo : Foo { // this is my class, I can do what ever I want
// this is pseudo code !!
OnMemberInvoke(stuff) {
lock {
Console.WriteLine("I'm calling " + stuff);
MemberInvoke(stuff);
Console.Writeline("I'm done calling " + stuff);
}
}
// I could also deal with OnMemberInvokeStart() and OnMemberInvokeDone()
// pairwise hooks too.
}
WrappedFoo wfoo = new WrappedFoo();
wfoo.A();
wfoo.B();
出力
I'm calling A
I'm done calling A
I'm calling B
I'm done calling B
DynamicObjects
これはとでできると思いますTryInvokeMember
が、C#で気に入っている型チェックとタブ補完がすべて失われます。この例ではlock
、スレッドセーフについて言及しましたが、これを行う一般的な方法を探しています。このコードは、再試行やロギングなどの追加レイヤーを必要とする実際のハードウェアテストを対象としています。