C# 一个公共类的两个私有子类
我有一个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 } }
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
方法您需要一个实例来调用这些方法:)和。。。但这不是子类化。这是我寻找的最后一个示例。谢谢,这是我要找的最后一个例子。非常感谢。