5

我很好奇在涉及 .NET 中的嵌套类型的某些场景中什么是好的做法。

假设您有一个 Wheel 类,并且 Wheel 类包含 Bearing 对象。Bearing 对象仅在 Wheel 中有意义,并且您不希望允许独立创建它,因此将 Bearing 类嵌套在 Wheel 对象中是有意义的。但是,假设您现在需要在 Wheel 类之外读取 Wheel.Bearings 属性。这现在需要将嵌套的 Bearing 类公开。

在这种情况下,最好的选择是什么?
1 - 创建一个嵌套在 Wheel 类中的公共 Bearing 类
2 - 创建一个独立的 Bearing 类,该类在其构造函数中接受一个 Wheel 对象
3 - 创建一个 Wheel 命名空间并在此命名空间内创建一个独立的 Bearing 类。
4 - 别的?

更新:我正在更新更多细节并反映迄今为止的一些建议。ClassParent 是父类,ClassChild 是子类。ClassChild 始终是 ClassParent 的孩子,单独存在是没有意义的。问题是 ClassChild 有一些属性需要公开公开,而其余的只能从 ClassParent 调用。一个示例是不应公开公开的 ClassChild.Delete 函数,因为它只能从 ClassParent 调用,因为 ClassParent 需要执行适当的清理和修改。

在查看了这些建议之后,我提出的设计对我来说看起来有点不干净,所以我想我会征求意见。我有:

public class Parent
{
  ChildNested childObj

  public DeleteChild()
  {   
      //expose this method publically
      childObj.DeleteChild()
      //other functionality 
  }

  public Child GetChild()
  {
      //expose Child, not ChildNested publically
      return childObj
  }

   private class ChildNested:Child
   {
         public Child()
         {
              Base.Child()
         }
         public DeleteChild()
         {
              Base.Delete()
         }
   }

public abstract class Child
{
 protected Child()
     {
     }
 protected Delete()
     {
     }
     public PublicPropertyToExpose()
     {
     }    
}
4

4 回答 4

8

这里最好的设计是创建一个Bearing带有internal构造函数的公共类,并在类中创建它的实例Wheel

如果Bearing该类需要访问该类的私有成员Wheel,您可以创建公共Bearingabstract,然后将其具体实现privateWheel.

一般来说,您不应该创建public嵌套类型

于 2010-03-10T17:06:23.377 回答
1

轴承可以独立存在,因为它可能足够有用,可以在世界其他地方使用,在车轮之外。

Wheel 是使用 Bearings 聚合的,但 Wheel 不定义 Bearing。轴承很有用,除了轮子外,还可以用于其他用途。

您需要 Bearing 的公共属性这一事实表明它需要是 Wheel 之外的公共类。

此外,当您重新发明轮子时会发生什么(我们都这样做......)。也许您使用了一种新的“空气轴承”,例如存在于微型涡轮机中,现在您在 Wheel 类中有多种轴承类型,其中一些没有使用。

我会将 Bearing 放在同一个命名空间中,但不在 Wheel 类中。我很少发现需要内部类。通常一个匿名课程会填补我需要的任何空白。

于 2010-03-10T17:15:44.483 回答
1
  • 使用私有构造函数创建一个独立的轴承类
  • 创建一个工厂类,该类将实例化给定 Wheel 类的 Bearing 类
于 2010-03-10T17:06:48.793 回答
1

我想独立测试“轴承”,所以我会选择第二个选项。

于 2010-03-10T17:09:35.207 回答