我有主课:

class MainClass
{
    public static void Main()
    {
        InputForm InputForm1 = new InputForm();
        InputForm1.ShowDialog(); // show interface to prompt user
    }
}


只需调用Windows窗体。此类具有以下类别:

public partial class InputForm : Form
{
    public InputForm()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // do some calculation and then create a dictionary of items

        for (int n = 1; n <= dict.Count; n++) // loop through items
        {
            LengthClass theLength = new LengthClass();
            dict[n].calculatedLength = theLength.calcLength(arg1, arg2, dict[n].speed);

        }
    }
}


单击该按钮时,程序将对从电子表格读取的数据进行一些计算,并将结果保存到词典中。每个元素都是动物,我具有一些要存储在字典中的属性(例如,在“ Dog”键下,我具有平均重量的狗,平均速度等)。
使用速度和两个默认参数(arg1和arg2),我必须调用LengthClass类的方法,以便获得特定动物在arg1小时和arg2分钟内覆盖的估计长度。
LengthClass是这样的:

class LengthClass
{
    public double calcLength(double arg1, double arg2, double speed)
    {
        // do some calculation
        return x;
    }
}


现在我的疑问是如何更好地设计代码。当遍历字典中的每个键时,我每次实例化LengthClass并调用其方法。
这是正确的做法吗?我想保持计算长度的方法与Windows窗体中的代码分开,以便在必要时更容易进行更改。但是我认为每次实例化该类都可能会使代码变慢,并且更好的设计可以使代码保持快速且易于阅读。有什么建议吗?

由于以下答案,似乎将calcLength方法声明为静态方法可以解决此问题,并避免需要对LengthClass进行重复实例化。
但是,如果LengthClass还有一个额外的方法,例如calcLength2(),则为了执行计算,需要调用一个新类的方法(例如helpClass),我是否需要将helpClass的方法声明为静态方法,以避免实例化helpClass从LengthClass中的calcLength2()调用其方法时?

最佳答案

在示例中,您给出的calcLength方法不必是实例方法,因为它不使用LengthClass的任何字段。您可以通过将此方法设为静态来避免或完全创建对象:

class LengthClass
{
    public static double calcLength(double arg1, double arg2, double speed)
    {
        // do some calculation
        return x;
    }
}


那么您可以这样称呼它:

public partial class InputForm : Form
{
    public InputForm()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        // do some calculation and then create a dictionary of items

        for (int n = 1; n <= dict.Count; n++) // loop through items
        {
            dict[n].calculatedLength = LengthClass.calcLength(arg1, arg2, dict[n].speed);
            v = myPort[n].midVol;
        }
    }
}

10-06 14:22