Mam następujący kod w badanej jednostkiOdbicie mówi, że metoda interfejsu jest wirtualna w zaimplementowanym typie, gdy tak nie jest?
public bool TestMethodsOf<T, I>()
{
var impl = typeof(T);
var valid = true;
foreach (var iface in impl.GetInterfaces().Where(i => typeof(I).IsAssignableFrom(i)))
{
var members = iface.GetMethods();
foreach (var member in members)
{
Trace.Write("Checking if method " + iface.Name + "." + member.Name + " is virtual...");
var implMember = impl.GetMethod(member.Name, member.GetParameters().Select(c => c.ParameterType).ToArray());
if (!implMember.IsVirtual)
{
Trace.WriteLine(string.Format("FAILED"));
valid = false;
continue;
}
Trace.WriteLine(string.Format("OK"));
}
}
return valid;
}
którą nazywam przez
Assert.IsTrue(TestMethodsOf<MyView, IMyView>());
Chcę zapewnić, że wszystkie metody z interfejsu są zadeklarowane jako wirtualny. Powodem jest to, że stosuję aspekt spring.net i dotyczy to tylko metod wirtualnych.
Problem, który mam, polega na tym, że implMember.IsVirtual jest zawsze prawdziwe, nawet jeśli nie są zadeklarowane jako takie w zadeklarowanym typie.
Co jest nie tak z moją logiką TestMethodsOf?
Cheers
doskonałe! Więc zmieniłem kod, aby sprawdzić IsFinal zamiast IsVirtual i teraz działa dobrze. Dzięki! –