从主类移动部分代码以处理可读性问题

时间:2014-11-17 18:45:52

标签: c# winforms

我有一个“Form1.cs”类,其中所有进程都发生,该文件有近2k行代码。 我无法正常阅读。

有没有办法将部分功能移动到另一个文件?扩展课程?我仍然希望能够从主“Form1.cs”调用这些函数。这些函数在主类中读取公共声明变量时应该没有任何问题。

using ...

namespace myprogram
{
    public partial class Form1 : Form
    {
       public void function1() {}
       public void function2() {}
       public void function3() {}
       public void function4() {}
    }
}

在上面的例子中 - 将函数4移动到另​​一个文件的正确方法是什么。有没有其他方法可以解决这个问题?

3 个答案:

答案 0 :(得分:2)

Form外部公开显示所有控件,然后只需将代码复制到一个单独的类中,并让它访问Form的实例来直接操作控件将无法帮助您维护你的代码。它只是让事情变得一团糟。

您真正想要的是将您的业务逻辑"或任何您想要调用的内容移动到一个单独的类中,而无需移动直接触及UI的代码。 (将该代码保留在原始Form。)

你说你已经有了辅助课程了,听起来你打算暂时走部分班级路线,所以下面的内容可能没有必要重申(但无论如何......)


假设您的Form目前看起来像这样:

public partial class Form1 : Form
{
   public void function4()
   {
       var currentText = MyTextBox.Text;

       // Do a bunch of stuff that depends on the Text value and even manipulates it

       MyTextBox.Text = ??? // Some other value
   }

   public void SomeOtherFunction()
   {
       function4();
   }
}

我将功能拆分为一个单独的类,它接受来自Form的参数并可以传回值,但绝对不会直接引用调用它的Form上的控件。

public partial class Form1 : Form
{
   private HelperClass helper;

   public Form1()
   {
       helper = new HelperClass();
   }

   public void SomeOtherFunction()
   {
       MyTextBox.Text = helper.Function4(MyTextBox.Text);
   }
}

public class HelperClass()
{
    public string Function4(string input)  // I need a better name
    {
       // Do a bunch of stuff that depends on the input value and even manipulates it

       return ???  // Some other value, perhaps from the previous stuff you did
    }
}

如果你需要返回多个值,那么有一些结构,例如Tuple,但要注意这也很难维护:

public class HelperClass()
{
    public Tuple<int,string> Function4(string input)  // I need a better name ;p
    {
       // Do a bunch of stuff that depends on the input value and even manipulates it

       return Tuple.Create(200, "Success!");
    }
}

或者只是创建另一个小类,创建一个实例,填充数据,然后返回到原始Form中的调用方法。

答案 1 :(得分:1)

首先注意:您不应该在表单代码后面有2K行代码!您应该将逻辑拆分为适当的对象,辅助类等。

回答你的问题:这正是partial课所做的。 Form1已标记为部分,因此只需创建一个新文件,然后添加:

public partial class Form1 : Form
{
     //All your functions
}

编译器将所有部分类组合在一起形成一个类定义。

答案 2 :(得分:0)

您可以创建新文件,并将您的课程添加为partial课程。这是Visual Studio代码模板已经完成的工作,可以单独保存代码和设计器代码。

只确保类的名称相同,名称空间也必须相同。

namespace myprogram
{
    public partial class Form1 : Form
    {
        public void function4() {}
    }
}

只要用partial关键字标记了您的课程,您就可以将课程设置为任意数量的文件。