如何在c#中调用调用当前方法的方法

时间:2015-11-17 05:15:29

标签: c#

我想回忆一下来自被调用方法的方法,我可以使用该方法或任何其他解决方案。

2 个答案:

答案 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");
   }
}

此代码仅用于快速演示,您可以在实施中进一步增强设计。

希望这能为您提供有关您需要重新设计设计的一些提醒。