C# で動的プロキシを作成する必要があります。このクラスで別のクラスをラップし、そのパブリック インターフェイスを使用して、これらの関数の呼び出しを転送する必要があります。
class MyRootClass
{
public virtual void Foo()
{
Console.Out.WriteLine("Foo!");
}
}
interface ISecondaryInterface
{
void Bar();
}
class Wrapper<T> : ISecondaryInterface where T: MyRootClass
{
public Wrapper(T otherObj)
{
}
public void Bar()
{
Console.Out.WriteLine("Bar!");
}
}
使用方法は次のとおりです。
Wrapper<MyRootClass> wrappedObj = new Wrapper<MyRootClass>(new MyRootClass());
wrappedObj.Bar();
wrappedObj.Foo();
生産する:
Bar!
Foo!
何か案は?
これを行う最も簡単な方法は何ですか?
これを行う最善の方法は何ですか?
本当にありがとう。
アップデート
Wernight の推奨に従い、C# 4.0 動的プロキシを使用してこれを実装しようとしました。残念ながら、私はまだ立ち往生しています。プロキシのポイントは、(通常、通常) 期待される他のインターフェイスを模倣することです。DynamicObject を使用するには、このすべてのクライアントを変更して、「ISecondaryInterface」ではなく「dynamic」を使用する必要があります。
A をラップするときに、A のインターフェイスをサポートしていることを (静的に?) アドバタイズするように、プロキシ オブジェクトを取得する方法はありますか。Bをラップすると、Bのインターフェースをサポートしていることをアドバタイズしますか?
更新 2
例えば:
class MySecretProxy : DynamicObject, ISecondaryInterface
{
public override void TryInvokeMember(...) { .. }
// no declaration of Bar -- let it be handled by TryInvokeMember
}