1

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

我怎样才能让它工作?

4

2 回答 2

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

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

于 2014-02-24T14:10:18.117 回答
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
        }
    }

}

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

于 2014-02-24T13:45:41.023 回答