【发布时间】:2016-10-22 11:27:32
【问题描述】:
我在单元测试中有以下代码
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;
}
我称之为
Assert.IsTrue(TestMethodsOf<MyView, IMyView>());
我想确保接口中的所有方法都声明为虚拟方法。原因是我正在应用 spring.net 方面,它只适用于虚拟方法。
我遇到的问题是 implMember.IsVirtual 总是正确的,即使它们没有在声明类型中声明。
我的 TestMethodsOf 逻辑有什么问题?
干杯
【问题讨论】:
标签: c# reflection virtual spring.net