公共的嵌套类型

MC.*_*MC. 5 .net nested namespaces nested-class

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

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

在这种情况下,最好的选择是什么?
1 - 创建嵌套在Wheel类
2中的公共Bearing类- 创建一个独立的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()
     {
     }    
}
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 8

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

如果Bearing类需要访问类的私有成员,则Wheel可以创建公共Bearingabstract,然后将具体实现作为private嵌套类Wheel.

通常,您不应该创建public嵌套类型.