class A
{
public virtual void Y()
{
Console.WriteLine("A.Y");
}
}
class B : A
{
public override void Y()
{
Console.WriteLine("B.Y");
}
}
如何安全地调用Y
方法中的方法,例如,记录某些操作,而无需编辑每个实现?
我知道virtual
使方法可以覆盖,并且除非你使用base
调用者,否则永远不会调用原始方法,我还调查了一下PostSharp但似乎没有在这里帮忙......
只是为了记录一些调用而不需要编辑每个调用,只是试着解决问题:(
答案 0 :(得分:4)
将公共接口和继承人的义务分为两种方法:
class A
{
public void Y()
{
Console.WriteLine("Y about to happen");
InnerY();
Console.WriteLine("Y happened");
}
protected virtual void InnerY()
{
}
}
class B : A
{
protected override void InnerY()
{
//No need to log - already done
}
}
答案 1 :(得分:0)
您可以使用StackTrace获取当前(或调用)方法的信息以及它所驻留的对象的信息。
public class A
{
public virtual string Y()
{
return Log.GetMethodName();
}
}
public class B : A {
public override string Y()
{
return Log.GetMethodName();
}
}
public class Log
{
public static string GetMethodName()
{
var st = new StackTrace();
var sf = st.GetFrame(1);
var method = sf.GetMethod();
return method.DeclaringType.Name +"."+ method.Name;
}
}