0

我有一个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);
        // ...
    }

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

4

4 回答 4

2

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

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

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

var mainWindow = new MainWindow();
var result = mainWindow.functionFromMainWindowClass(5, 6);
于 2013-03-30T10:37:37.390 回答
2

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

public class GridClass
{
  private MainWindow window;
  public GridClass( MainWindow Window)
  {
     window = Window;
  }
  public Point functionFromGridClass()
  {
     Point variable = window.functionFromMainWindowClass(0, 0);
  }
}
于 2013-03-30T10:52:35.433 回答
0

在不确切知道发生了什么的情况下很难给出具体的建议,但总体情况是,您需要以某种方式获取MainWindow要调用该方法的类的实例,或者通过将其传递给Grid构造函数或类似方法,或者通过从某个资源管理器那里获取它。

于 2013-03-30T10:43:08.553 回答
0

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

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

}
于 2013-03-30T10:47:00.213 回答