逻辑分组方法

时间:2017-03-11 19:54:19

标签: c# class-structure

基本上我有一个带有私有方法的类和许多调用这个私有方法的公共方法。我想在逻辑上对这些公共方法进行分组(最好是单独的文件),以便它有条理,更易于使用和维护。

public class MainClass
{
    private void Process(string message)
    {
        // ...
    }

    public void MethodA1(string text)
    {
        string msg = "aaa" + text;
        Process(msg);
    }
    public void MethodA2(int no)
    {
        string msg = "aaaaa" + no;
        Process(msg);
    }

    public void MethodB(string text)
    {
        string msg = "bb" + text;
        Process(msg);
    }

    // lots of similar methods here
}

现在我打电话给他们:

MainClass myMainClass = new MainClass();
myMainClass.MethodA1("x");
myMainClass.MethodA2(5);
myMainClass.MethodB("y");

我希望能够像这样打电话给他们:

myMainClass.A.Method1("x");
myMainClass.A.Method2(5);
myMainClass.B.Method("y");

我怎样才能实现它?可能有一种我不知道的简单方法。

3 个答案:

答案 0 :(得分:3)

您正在寻找object composition

  

在计算机科学中,对象组成(不要混淆   函数组合)是一种组合简单对象或数据类型的方法   更复杂的。

顺便说一下,你不应该认为这样的重构在逻辑上是分组方法:只需要用清晰的separation of concerns来实现你的代码:< / p>
  

在计算机科学中,关注点分离(SoC)是一种设计   将计算机程序分成不同部分的原则,   这样每个部分都会解决另一个问题。

实际例子:

public class A
{
    // B is associated with A
    public B B { get; set; }
}

public class B
{
     public void DoStuff() 
     {
     }
}

A a = new A();
a.B = new B();
a.B.DoStuff();

答案 1 :(得分:1)

您可以使用嵌套类:

public class MainClass
{
    // private method here

    public class A
    {
        // methods for A go here
    }

    public class B
    {
        // methods for B go here
    }
}

如果您希望它们位于不同的文件中,您可以使用MainClass的部分类

// file 1
public partial class MainClass
{
    public class A { }
}

// file 2
public partial class MainClass
{
    public class B { }
}

答案 2 :(得分:1)

您可以将方法移动到单独的类中。类可以是依赖于MainClass公共/内部Process方法的新类,嵌套在MainClass中或从MainClass继承。继承示例:

public class MainClass
{
   protected void Process(string message)
   {
    // ...
   }
}

public class A: MainClass
{
    // methods for A go here
}

public class B: MainClass
{
    // methods for B go here
}