【问题标题】:Calling other class function调用其他类函数
【发布时间】:2013-03-30 10:34:59
【问题描述】:

我有一个grid 课程和一个MainWindow 课程。 Grid的类函数需要调用MainWindow的函数:

    // function from grid class:
    public Point functionFromGridClass()
    {
        Point variable = MainWindow.functionFromMainWindowClass(0, 0);
        // ...
    }
    // function from MainWindow class:
    public static Point functionFromMainWindowClass(int x, int y)
    {
        Vector2 mouse;
        mouse.X = x;
        mouse.Y = y + (ClientRectangle.Height - glview.Size.Height);
        // ...
    }

如果我删除functionFromMainWindowClass 中的static 关键字,则无法从网格类中调用它。如果我不删除static 关键字,那么我不能使用MainWindow 的类变量ClientRectangleglview,我会收到警告"An object reference is required for the non-static field, method, or property"。我从来没有遇到过这个问题,应该怎么解决?

【问题讨论】:

  • 我几乎每天都遇到这个问题,至少每隔一天,:) 为什么不在 stackoverflow 中进行搜索?
  • 我搜索了但没有找到,可能是因为我不知道如何“命名”这个问题。

标签: c# class function static


【解决方案1】:

网格类必须持有 MainWindow 实例的引用,并且可能在构造时提供给网格。

public class GridClass
{
  private MainWindow window;
  public GridClass( MainWindow Window)
  {
     window = Window;
  }
  public Point functionFromGridClass()
  {
     Point variable = window.functionFromMainWindowClass(0, 0);
  }
}

【讨论】:

    【解决方案2】:

    我收到警告“非静态字段、方法或属性需要对象引用”

    警告告诉你该怎么做:你需要一个实例才能调用实例方法。

    因此您可以从方法中删除 static 关键字,然后在您的 Grid 类中创建MainWindow 的实例以便能够调用该方法:

    var mainWindow = new MainWindow();
    var result = mainWindow.functionFromMainWindowClass(5, 6);
    

    【讨论】:

    • 不,如果我这样做,那么 ClientRectangle 和 glview 变量将与原始 MainWindow 的类不同(我真的不知道如何解释)。 我在问一些关于两个类之间通信的问题。
    • 您还没有真正解释过ClientRectangle 是什么,所以很难提供帮助。但是您可以将此代码放在一个帮助类中,您可以在需要调用该方法时对其进行实例化。或者重复使用同一个实例。
    【解决方案3】:

    在不确切知道发生了什么的情况下很难给出具体建议,但总体情况是,您需要以某种方式获取要调用该方法的 MainWindow 类的实例,或者将其传递给Grid 在建筑或类似的地方,或者从一些资源经理那里得到它。

    【讨论】:

      【解决方案4】:

      引用类名调用静态方法。 像这样调用你的主窗口类函数:

      public Point functionFromGridClass()
      {
           MainWindowClass.functionFromMainWindowClass(val1, val2);
      
      }
      

      【讨论】:

        猜你喜欢
        • 2013-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-29
        • 1970-01-01
        相关资源
        最近更新 更多