调用其他类函数

时间:2013-03-30 10:35:00

标签: c# class function static

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

4 个答案:

答案 0 :(得分:2)

  

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

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

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

引用className调用静态方法。 这样称呼主窗口类函数:

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

}