两个私有子类到一个公共类

时间:2014-02-24 13:40:26

标签: c# class inheritance private-class

我有一个C#项目,我需要有一个基类和两个子类,我希望子类对基类是私有的。这就是它的样子:

public class MyBaseClass
{
    public void doMyWork()
    {
        doSubClass1();
        doSubClass2();
    }
}

private class MySubClass1
{
    public void doSubClass1()
    {
        //Do stuff
    }
}

private class MySubClass2
{
    public void doSubClass2()
    {
        //Do stuff
    }
}

我怎样才能让它发挥作用?

2 个答案:

答案 0 :(得分:3)

如果课程本身不是那么私密但仍然包含在你的基础和外面无法进入?

public class MyBaseClass
{
    private readonly MySubClass1 _sub1 = new MySubClass1();
    private readonly MySubClass2 _sub2 = new MySubClass2();

    public void DoMyWork()
    {
        _sub1.DoSubClass1();
        _sub2.DoSubClass2();
    }
}

public class MySubClass1
{
    public void DoSubClass1() { /* Do stuff */ }
}

public class MySubClass2
{
    public void DoSubClass2() { /* Do stuff */ }
}

如果这不够好并且您需要在单独的文件中,如您所述,那么您可以使用部分类,如此。

Class1.cs文件

public partial class MyBaseClass
{
    public void DoMyWork()
    {
        (new MySubClass1()).DoSubClass1();
        (new MySubClass2()).DoSubClass2();
    }
}

Class2.cs文件

public partial class MyBaseClass
{
    private class MySubClass1
    {
        public void DoSubClass1() { /* Do stuff */ }
    }
}

Class3.cs文件

public partial class MyBaseClass
{
    private class MySubClass2
    {
        public void DoSubClass2() { /* Do stuff */ }
    }
}   

但是,你在这里想要实现的目标还不是很清楚。

答案 1 :(得分:2)

如果将子类放在基类中,基类可以访问它们。要使用您的示例,它将是这样的:

public class MyBaseClass
{
    public void doMyWork()
    {
        new MySubClass1().doSubClass1();
        new MySubClass2().doSubClass2();
    }

    private class MySubClass1
    {
        public void doSubClass1()
        {
            //Do stuff
        }
    }

    private class MySubClass2
    {
        public void doSubClass2()
        {
            //Do stuff
        }
    }

}

请注意,我所做的只是将最后一个}移到底部。