Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一个公共类的两个私有子类_C#_Class_Inheritance_Private Class - Fatal编程技术网

C# 一个公共类的两个私有子类

C# 一个公共类的两个私有子类,c#,class,inheritance,private-class,C#,Class,Inheritance,Private Class,我有一个C#项目,我需要一个基类和两个子类,我希望子类对基类是私有的。这就是它的样子: public class MyBaseClass { public void doMyWork() { doSubClass1(); doSubClass2(); } } private class MySubClass1 { public void doSubClass1() { //Do stuff } }

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

}

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

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

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

}

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

如果类本身不是私有的,但仍然包装在您的基中&外部不可访问,这会有什么影响

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 */ }
    }
}
public partial class MyBaseClass
{
    private class MySubClass2
    {
        public void DoSubClass2() { /* Do stuff */ }
    }
}   
Class3.cs文件

public partial class MyBaseClass
{
    private class MySubClass1
    {
        public void DoSubClass1() { /* Do stuff */ }
    }
}
public partial class MyBaseClass
{
    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 */ }
}
如果这还不够好,并且您需要将它们放在单独的文件中,如您所述,那么您可以使用分部类,如下所示

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 */ }
    }
}
public partial class MyBaseClass
{
    private class MySubClass2
    {
        public void DoSubClass2() { /* Do stuff */ }
    }
}   
Class3.cs文件

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

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

我不明白您需要什么。请重新表述您的问题抱歉,但是所提供的代码甚至都没有编译,因为
MybaseClass
无法“看到”其他类(目前不是子类)中的方法。你到底想实现什么?在我看来,实现这一点的唯一方法是公共类MyBaseClass{private class MySubClass1{}私有类MySubClass2{}。这将在基类中封装这两个类。然而,请注意,这是非常糟糕的设计!您可能应该重新考虑您的体系结构以避免这种情况。那么,封装呢?如果这就是你想要实现的……这就是你想要的吗?我不明白你需要什么。请重新表述您的问题抱歉,但是所提供的代码甚至都没有编译,因为
MybaseClass
无法“看到”其他类(目前不是子类)中的方法。你到底想实现什么?在我看来,实现这一点的唯一方法是公共类MyBaseClass{private class MySubClass1{}私有类MySubClass2{}。这将在基类中封装这两个类。然而,请注意,这是非常糟糕的设计!您可能应该重新考虑您的体系结构以避免这种情况。那么,封装呢?如果这就是你想要实现的……这就是你想要的吗
MyBaseClass
没有
doSubClass1
doSubClass2
方法您需要一个实例来调用这些方法:)和。。。但这不是子类化。
MyBaseClass
没有
doSubClass1
doSubClass2
方法您需要一个实例来调用这些方法:)和。。。但这不是子类化。这是我寻找的最后一个示例。谢谢,这是我要找的最后一个例子。非常感谢。