ため、実行時にコールグラフを作成し、あなたが2つの簡単なインターフェースとそのメソッドがあるだろう:クラスIに行われた呼び出しを知ることができるようにしたいと思いISerializable
を実装する場合は、具体的な方法
ISerializable.Serialize(IValueWriter writer)
IValueWriter.WriteInt32(Int32 value)
IValueWRiter.WriteInt64(Int64 value)
をISerializable.Serialize(IValueWriter writer)
実装内のIValueWriter
を呼び出し、それからコールグラフを生成します。これらのすべては、リフレクションとを使用して実行時に行う必要があります。これはSerializeメソッドを呼び出すことなく行う必要があります。また、クラス内でコードを制御することはできません。
例:
public sealed class SomeObject : ISerializable
{
private readonly Int32 first;
private readonly Int64 second;
public SomeObject(Int32 first, Int64 second)
{
this.first = first;
this.second = second;
}
public void Serialize(IValueWriter writer)
{
writer.WriteInt32(this.first);
writer.WriteInt64(this.second);
}
}
コールグラフは次のようになります。
SomeObject -> Serialize | -> IValueWriter.WriteInt32
| -> IValueWriter.WriteInt64
どのように1は、きれいな方法でこれを実現するのでしょうか? 私が本当に目指しているのは基本的に、インターフェイスメソッドの特定の実装で行われた呼び出しのMethodInfo[]
です。
私はこれをちょっと解読した後にこれを理解しました。基本的に正しいです。私は基本的にMethodInfoをTypeから取り出し、MethodBodyとMethodInfo.GetMethodBodyで再生しました。 OpCode構造のOpCodesフィールドを反映させて、それぞれの構造に数値をデコードする逆ルックアップテーブルを作成しました。私はあなたの答えを解決策にしておきますが、それは私が平均して発見したものだからです。 –