将功能组织成一个类(按类别)

时间:2014-10-02 18:15:01

标签: c# inheritance interface

我有一个有一些功能的课程。这些功能可以归类为“NameSpace”。 我搜索一种方法将每个函数组织成一些命名空间到我的类中。 有人建议我改变方法。使用Interface而不是继承。

这里有一些可以理解的样本

 public class Class1
    {
        public string A = "A";
        public string B = "B";
        public int one = 1;
        public int two = 2;

        public Printer globalPrinter;


    }

public class Class10 : Class1
{
    public class Letter
    {
        public void FunctionA()
        {
            globalPrinter.print(A);
        }
        public void FunctionB()
        {
            globalPrinter.print(B);
        }
    }

    public class Number
    {

        public void Function1()
        {
            globalPrinter.print(one);
        }
        public void Function2()
        {
            globalPrinter.print(two);
        }
    }


}

public class ClassX : Class10
{
    public ClassX()
    {
        Letter.FunctionA();
        Letter.FunctionB();
        Number.Function1();
        Number.Function2();
    }
}

var c10 = new ClassX();

此代码不起作用。你可以看一下,在样本的最后,你会看到

  Letter.FunctionA();
  Letter.FunctionB();
  Number.Function1();
  Number.Function2();

我可以简单地将FunctionA和FunctionB放在Class10中。但如果有100个功能。将函数拆分为类别可能更有趣。

让我看看你解决问题的方法。


我添加了一些帮助分类的项目。


回答完整代码

 public class Class1
    {
        public string A = "A";
        public string B = "B";
        public int one = 1;
        public int two = 2;

        public void globalPrinter(object t)
        {
        }
    }

    public class Class10 : Class1
    {
        public class Letter
        {
            readonly Class10 parent;
            public Letter(Class10 parent)
            {
                this.parent = parent;
            }
            public void FunctionA()
            {
                parent.globalPrinter(parent.A);
            }
            public void FunctionB()
            {
                parent.globalPrinter(parent.B);
            }
        }

        public class Number
        {
               readonly Class10 parent;
               public Number(Class10 parent)
            {
                this.parent = parent;
            }
            public void Function1()
            {

                parent.globalPrinter(parent.one);
            }
            public void Function2()
            {
                parent.globalPrinter(parent.two);
            }
        }
    }

    public class ClassX : Class10
    {
        public ClassX()
        {
            new Letter(this).FunctionA();
            new Letter(this).FunctionB();
            new Number(this).Function1();
            new Number(this).Function2();                
        }
    }

    ClassX c10 = new ClassX();

1 个答案:

答案 0 :(得分:1)

问题是像Class10.Letter这样的子类不是其父类Class10所属的继承层次结构的一部分。

因此,Class10.Letter不会从Class1继承,只有Class10继承自Class1,因此Class10.Letter需要Class1的实例或Class10因此可以访问globalPrinter

public class Class10: Class1 {
    public class Letter {
        readonly Class10 parent;
        public Letter(Class10 parent) {
            this.parent = parent;
        }
        public void FunctionA() {
            parent.globalPrinter.print(parent.A);
        }
    }
}

同样ClassX继承自Class10,因此它可以访问Class10个函数,但它不会从Class10.Letter继承,因此ClassX需要一个实例Letter如果它正在调用非静态函数:

public ClassX() {
    new Letter(this).FunctionA();
    ...