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



我有一个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
    }
}

我怎样才能让它工作?

如果类本身不是那么私密的,但仍然被包裹在你的基础中并且无法在外面访问,这会有什么伤害吗?

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 */ }
}

如果这还不够好,并且您需要将它们放在单独的文件中,如您所说,那么您可以使用分部类,如下所示。

类 1.cs 文件

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

类2.cs文件

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

类 3.cs 文件

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

但是仍然不太清楚你在这里要实现什么。

如果将子类放在基类中,则基类可以访问它们。使用您的示例,它将如下所示:

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
        }
    }
}

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

最新更新