1

我是一个新手程序员。我有一个名为的类,它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 类?

4

2 回答 2

5

GravCalc IS Main...因此,如果在 Main 中创建 GravCalc,您将再次创建 Main,然后再次创建 main,然后最终耗尽堆栈。

您要做的是找到原始 Main 的创建位置并将其替换为 GravCalc 并从new GravCalcMain 中取出

于 2013-06-03T22:19:14.923 回答
2

不要从 Main 继承来访问控件,您应该将需要在类中使用的控件的引用传递给 GravCalc 的构造函数。

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;
    }
};
于 2013-06-03T22:48:57.847 回答