Nadal staram się, aby moja zasada FxCop działała.Jak uzyskać metodę faktycznie wywoływaną przez instrukcję IL callvirt w FxCop
W związku z tym muszę dowiedzieć się, jakie metody wywołuje metoda. Poprzednio używałem CallGraph.CallersFor()
(robiąc to na odwrót, co jest moim ostatecznym celem), ale wydaje się, że ma ten sam problem, który opisałem poniżej.
Jako alternatywę dla użyciu klasy CallGraph
Próbowałem odwiedzając wszystkie metody wzywa do budowania słownika, w oparciu o ten kod:
public override void VisitMethodCall(MethodCall call)
{
Method CalledMethod = (call.Callee as MemberBinding).BoundMember as Method;
// ....
}
Jednak okazuje się, że jeśli zwana metoda jest w klasie pochodnej nadpisuje metodę klasy bazowej, następnie BoundMember
jest metodą klasy bazowej, a nie klasy potomnej (która jest faktycznie wywoływana).
Pytanie: Jak mogę uzyskać metodę, która zostanie wywołana w przypadku instrukcji IL callvirt w FxCop?