【问题标题】:Two private subclasses to one public class [closed]一个公共类的两个私有子类[关闭]
【发布时间】:2014-03-26 05:14:13
【问题描述】:

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

我怎样才能让它工作?

【问题讨论】:

  • 我不明白你需要什么。请改写您的问题
  • 抱歉,所提供的代码甚至无法编译,因为MybaseClass 无法“看到”其他类(目前不是子类)中的方法。你到底想完成什么?
  • 在我看来,这样做的唯一方法是 public class MyBaseClass { private class MySubClass1 {} private class MySubClass2 {} } 这将把这两个类封装在你的基类中。但是请注意,这是非常糟糕的设计!您可能应该重新考虑您的架构以避免这种情况。
  • 那么,封装?如果那是你想要完成的..
  • 这是你想要的吗? Partial Classes

标签: c# class inheritance private-class


【解决方案1】:

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

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

}

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

【讨论】:

  • MyBaseClass 没有 doSubClass1doSubClass2 方法
  • 你需要一个实例来调用这些方法 :) 并且......但这不是子类化。
【解决方案2】:

如果类本身不是那么私密但仍然包裹在您的基础中并且在外部无法访问,这会不会很痛苦?

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

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

【讨论】:

  • 这是我寻找的最后一个例子。谢谢
猜你喜欢
  • 2016-03-27
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 2011-11-06
  • 2018-05-18
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多