我有一个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的类变量ClientRectangle
和glview
,我会收到警告"An object reference is required for the non-static field, method, or property"
。我从来没有遇到过这个问题,应该是什么解决方案?
答案 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);
}