說你有兩個簡單的接口及其方法:請在運行時調用關係圖,具體的方法
ISerializable.Serialize(IValueWriter writer)
IValueWriter.WriteInt32(Int32 value)
IValueWRiter.WriteInt64(Int64 value)
當一個類實現ISerializable
我希望能夠知道哪些調用由執行ISerializable.Serialize(IValueWriter writer)
內部的IValueWriter
並從中生成調用圖。所有這些都需要在運行時使用反射和而不需要調用序列化方法,並且它也將在我無法控制的類上完成,只要內部的代碼執行。
例子:
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
如何將一個在非常乾淨的方式做到這一點? 我真正瞄準的是基於接口方法的特定實現中調用的MethodInfo[]
。
我在扼殺了它之後想到了這一點。基本上你是對的。我基本上從Type中取出MethodInfo,然後使用MethodBody和MethodInfo.GetMethodBody進行播放。我通過反映OpCode結構的OpCodes字段來構建反向查找表,以將它們的數值解碼爲它們各自的結構。我會將您的答案標記爲解決方案,因爲這幾乎是我在此期間發現的。 –