调用其他类函数

本文关键字:类函数 其他 调用 | 更新日期: 2023-09-27 18:06:49

我有一个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关键字,那么我就不能使用主窗口的类变量ClientRectangleglview,我得到一个警告"An object reference is required for the non-static field, method, or property"。我从来没有遇到过这个问题,应该怎么解决呢?

调用其他类函数

网格类必须保存MainWindow实例的引用,并且可能在构建时提供给网格。

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

我得到一个警告"非静态字段、方法或属性需要对象引用"

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

因此,您可以从方法中删除静态关键字,然后在您的Grid类中创建MainWindow的实例,以便能够调用该方法:
var mainWindow = new MainWindow();
var result = mainWindow.functionFromMainWindowClass(5, 6);

在不确切知道发生了什么的情况下很难给出具体的建议,但总体情况是,您需要以某种方式获得您想要调用该方法的MainWindow类的实例,无论是通过将其传递到Grid在构建或类似,还是通过从一些资源管理器获得它。

静态方法通过className的引用来调用。像这样调用主窗口类函数:

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