我想回忆一下来自被调用方法的方法,我可以使用该方法或任何其他解决方案。
答案 0 :(得分:0)
您可以使用CallerInfoAttribute
来获取调用者并使用反射来调用它。
但是......这是很多工作,我认为你不是很熟练。幸运的是,还有另一种方式!
您可以添加MethodInfo
类型的参数。让我们说A()
来电B(MethodInfo)
。然后A
需要反映自己并将其传递给B
。然后在B
中,您可以使用MethodInfo.Invoke
来调用该方法。
嗯......事实证明,替代方案也需要反思......所以,如果你不熟悉反思,请先了解更多信息!
如果您想了解有关MethodInfo
的更多信息,请转到此处:https://msdn.microsoft.com/en-us/library/system.reflection.methodinfo(v=vs.110).aspx
答案 1 :(得分:0)
我在你的问题用例中看到了一些歧义..
让我们来看一个简单的用例:你想打电话给他们,他们又会给你回电话。对它有什么用处,你什么时候想停下来继续完成一些工作?!
例如,下面的代码就像你期望的那样将进行无限递归并导致StackOverflowException
class MyClass
{
public void TargetMethod(Action callback)
{
Console.WriteLine("Inside TargetMethod");
callback(); //This call the SourceMethod() and which inturn call TargetMethod() again in infinite recursion.
}
public void SourceMethod()
{
Console.WriteLine("Inside SourceMethod");
TargetMethod(SourceMethod);
}
}
//Calling code
MyClass objMyClass = new MyClass();
objMyClass.SourceMethod();
相反,您可以使用Callback机制,这样一旦您在目标方法中完成,就可以通知另一个处理程序方法,该方法可以执行某些操作,例如记录或更新UI等,特定于案例的内容。
class MyClass
{
public void TargetMethod(Action callback)
{
Console.WriteLine("Inside TargetMethod");
callback(); //This calls/notify the handler to do some stuff.
}
public void SourceMethod()
{
Console.WriteLine("Inside SourceMethod");
TargetMethod(CallbackHandler); //Notice here we are calling to a handler which can do some stuff for us.
}
public void CallbackHandler()
{
Console.WriteLine("Inside CallbackHandler");
}
}
此代码仅用于快速演示,您可以在实施中进一步增强设计。
希望这能为您提供有关您需要重新设计设计的一些提醒。