【问题标题】:How do I call a method from another controller?如何从另一个控制器调用方法?
【发布时间】:2016-07-28 09:57:18
【问题描述】:

我有几个可重用的方法 GetChartData() 和 GetPeopleData()。它们存储在一个名为 CentralData.cs 的控制器中

我希望能够从不同的控制器调用这些方法中的任何一种,但我不知道该怎么做。有谁知道我如何调用位于另一个控制器中的方法?

如果方法在同一个类中,它会很简单:

MyMethod()
{
    GetChartData();
}

那么如果方法在不同的控制器中并且作为不同的类,我该如何调用它呢?

【问题讨论】:

  • 调用GetChartData()后是否要返回MyMethod()
  • 您的示例不够准确,无法得到真正的答案:例如,我们不知道GetChartData 是否有真正的理由在控制器中(它可能存在于外部类中,静态帮助类,或其他)。如果它需要在控制器中,您可以使用继承,但再一次,更具体一点会很有用。
  • 如果您需要从多个控制器访问通用功能,您可能应该考虑将其移至业务逻辑层是否明智。如果这看起来有点矫枉过正,至少考虑为您的两个控制器创建一个基类并将您重用的方法添加到该类中。

标签: c# controller


【解决方案1】:

您可以创建一个Controller 的对象并像一个简单的类一样调用该函数。我认为这种方法没有任何问题。毕竟,控制器只是一个类。 例如,

MyController obj = new MyController();
obj.MyFunction();

【讨论】:

    【解决方案2】:

    如果您有对象的引用,则只能从另一个类调用非静态方法。
    如果您在第一个控制器的某处创建第二个控制器,例如:

    ButtonClick(object Sender, EventArgs e) {
        CentralData c = new CentralData();
    }
    

    您可以简单地将该引用保存在私有变量中,然后再说

    MyMethod()
    {
        c.GetChartData();
    }
    

    如果你在另一个类中创建它们,你必须将 CentralData 对象传递给你的另一个控制器,比如

    public static void Main() {
        CentralData c = new CentralData();
        WindowController w = new WindowController(c);
    }
    

    public static void Main() {
        CentralData c = new CentralData();
        WindowController w = new WindowController();
        w.c = c;
    }
    

    【讨论】:

      【解决方案3】:

      如果您的意思是您有 2 个控制器类:ControllerOtherController,那么您可以像这样从第一个类访问位于第二个类中的方法:

      class Controller
      {
          public void MethodA()
          {
              OtherController.MethodB(); // This will work because MethodB is static
              // Like shown above you can call a static method from anywhere
          }
      }
      
      class OtherController
      {
          public static void MethodB() // <-- Notice "static"
          {
              // Do stuff
          }
      }
      

      我希望这就是您要查找的内容,并且这是一个充分的解释。如果我太不清楚,那就问什么令人困惑。

      【讨论】:

        猜你喜欢
        • 2019-10-17
        • 1970-01-01
        • 2011-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多