Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该在哪里/如何创建类的实例?_C# - Fatal编程技术网

C# 我应该在哪里/如何创建类的实例?

C# 我应该在哪里/如何创建类的实例?,c#,C#,我是个新手程序员。我有一个名为GravCalc的类继承自名为Main的表单类。内部有许多处理不同控件的方法。下面是一个代码示例 public class GravCalc : Main { private static float engineer = 1.0f; public void ShowEngineer() { GravCalc.engineer = 1.1f; gravEngin

我是个新手程序员。我有一个名为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;
        }
    };
我会使这些方法和类成为静态的,但这样我就不能从窗体继承或操作控件,因为它们是非静态的

在这种情况下,我必须创建类的实例。所以我写了GravCalc myGravCalc=新的GravCalc;在主课上

一切都在编译,但当我启动程序时,会创建我的类的多个实例,直到它达到最大堆栈帧数,因此会发生System.StackOverflowException

我做错了什么

编辑

我想做的是将所有与一个面板相关的方法和变量分组到一个类中。如果它是静态的,那就太完美了。我已经让它从Main继承来访问我的控件,但是你意识到这不是我想要的


那么,是否有可能创建一个可以对控件进行操作的类呢?或者我应该把所有的东西都扔进那个表单类吗?

GravCalc是主要的。。。所以,若在Main中创建GravCalc,那个么您将再次生成Main,然后再次生成Main,最终耗尽堆栈


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

GravCalc is Main。。。所以,若在Main中创建GravCalc,那个么您将再次生成Main,然后再次生成Main,最终耗尽堆栈


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

而不是从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;
    }
};

您应该将对需要在类中使用的控件的引用传递到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;
    }
};

为什么GravCalc类从Main继承?你意识到这使GravCalc成为一种形式吗?那么GravCalc继承了Main,Main实例化了一个新的GravCalc?b[e]mused是“好的”这个词……我们很幸运地生活在一个空间没有这么大限制的世界里。GravCalc似乎是一个不必要的缩写名称。不要那样做。把它拼出来。@user414076 GravCalc对我来说很清楚。您确定要使用GraviontechnologyResearch卫星和SourcesNededCalculator吗?为什么您的GravCalc类继承自Main?你意识到这使GravCalc成为一种形式吗?那么GravCalc继承了Main,Main实例化了一个新的GravCalc?b[e]mused是“好的”这个词……我们很幸运地生活在一个空间没有这么大限制的世界里。GravCalc似乎是一个不必要的缩写名称。不要那样做。把它拼出来。@user414076 GravCalc对我来说很清楚。你确定你想要重力技术研究卫星和资源电子计算器吗?这取决于他写新陈述的确切地点,不是吗?是的,但根据例外的性质,很容易猜到地点:这取决于他写新陈述的确切地点,不是吗?是的,但根据例外情况的性质,很容易猜到: