0

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

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");

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

4

3 回答 3

5

您正在寻找对象组合

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

顺便说一句,您不应该认为这样的重构对方法进行逻辑分组:只是您需要以明确的关注点分离来实现您的代码:

在计算机科学中,关注点分离 (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();
于 2017-03-11T19:58:27.480 回答
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
}
于 2017-03-11T19:58:52.990 回答
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 { }
}
于 2017-03-11T19:57:39.677 回答