我是新手程序员。我有一个名为GravCalc
的类,它继承自我的表单类Main
。里面有很多处理不同控件的方法。这是一个代码示例。
public class GravCalc : Main
{
private static float engineer = 1.0f;
public void ShowEngineer()
{
GravCalc.engineer = 1.1f;
gravEngineerLabel.Visible = true;
gravEngineerLine.Visible = true;
}
};
我会将这些方法和类设为静态,但之后我无法继承Form
或对控件进行操作,因为它们是非静态的。
在这种情况下,我必须创建我的类的实例。所以我在GravCalc myGravCalc = new GravCalc();
课程中写了Main
。
一切都在编译,但是当我启动程序时,会创建我的类的多个实例,直到它达到最大堆栈帧数,因此System.StackOverflowException
发生。
我做错了什么?
修改
我想要做的是将所有方法和变量与一个面板组合成一个类。如果它可以是静态的,那将是完美的。我已经让它继承Main
来访问我的控件,但是你意识到这不是我想要的。
那么有可能创建一个可以对控件进行操作的类吗?或者我应该在那个Form类中添加一些东西吗?
答案 0 :(得分:5)
GravCalc IS Main ...所以如果在Main中创建GravCalc,你再次制作一个Main,然后再制作一个main,然后最终耗尽堆栈。
您要做的是找到创建原始主菜单的位置并将其替换为GravCalc并从主菜单中取出new GravCalc
答案 1 :(得分:2)
您应该将对类中需要使用的控件的引用传递给GravCalc的构造函数,而不是从Main继承以访问控件。
public class GravCalc
{
private ControlType _control1;
private ControlType _control2;
public GravCalc(ControlType control1, ControlType control2)
{
_control1 = control1;
_control2 = control2
}
private static float engineer = 1.0f;
public void ShowEngineer()
{
GravCalc.engineer = 1.1f;
gravEngineerLabel.Visible = true;
gravEngineerLine.Visible = true;
}
};