C#中的私人内部类 – 为什么不是更频繁地使用它们?

我相对较新的C#和每次我开始工作一个C#项目(我只工作在C#中几乎成熟的项目)我不知道为什么没有内部类?

也许我不明白他们的目标。对我来说,内部类(至少是私有内部类)在Pascal / Modula-2 / Ada中看起来很像“内部过程”:它们允许在较小部分中分解主类,以便于理解。

例子:这里是什么是看到的大部分时间:

public class ClassA
{
   public MethodA()
   {
      <some code>
      myObjectClassB.DoSomething(); // ClassB is only used by ClassA
      <some code>
   }
}

public class ClassB
{
   public DoSomething()
   {
   }
}

因为ClassB将被使用(至少一段时间)只有ClassA,我的猜测是这个代码将更好地表示如下:

   public class ClassA
   {
      public MethodA()
      {
         <some code>
         myObjectClassB.DoSomething(); // Class B is only usable by ClassA
         <some code>
      }

      private class ClassB
      {
         public DoSomething()
         {
         }
      }
   }

我很高兴听到你对这个问题 – 我是对吗?

提前致谢!

嵌套类(可能最好避免单词“inner”作为C#中的嵌套类与Java中的内部类有些不同)确实可以非常有用。

没有提到的一种模式是“更好的枚举”模式 – 这可以比Java中的更灵活:

public abstract class MyCleverEnum
{
    public static readonly MyCleverEnum First = new FirstCleverEnum();
    public static readonly MyCleverEnum Second = new SecondCleverEnum();

    // Can only be called by this type *and nested types*
    private MyCleverEnum()
    {
    }

    public abstract void SomeMethod();
    public abstract void AnotherMethod();

    private class FirstCleverEnum : MyCleverEnum
    {
        public override void SomeMethod()
        {
             // First-specific behaviour here
        }

        public override void AnotherMethod()
        {
             // First-specific behaviour here
        }
    }

    private class SecondCleverEnum : MyCleverEnum
    {
        public override void SomeMethod()
        {
             // Second-specific behaviour here
        }

        public override void AnotherMethod()
        {
             // Second-specific behaviour here
        }
    }
}

我们可以用一些语言支持来做一些这样的自动 – 和有很多选项我没有在这里,如实际上没有使用嵌套类的所有值,或使用相同的嵌套类的多个值,但给它们不同的构造函数参数。但基本上,嵌套类可以调用私有构造函数给出了很多权力。

http://stackoverflow.com/questions/454218/private-inner-classes-in-c-sharp-why-arent-they-used-more-often

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:C#中的私人内部类 – 为什么不是更频繁地使用它们?