【问题标题】:C# Difference between Nested classes vs child class without PolymorphismC#嵌套类与没有多态的子类之间的区别
【发布时间】:2020-11-21 18:21:49
【问题描述】:

假设 C2 是 C1,我需要 C2 才能访问 M1,而 C1 不能访问 M2。如果我不需要多态,那么下面的代码会和我在没有嵌套类的情况下做同样的事情,而是使用继承吗?

class C1 {
  protected void M1() {
    \\code
  class C2 {
  private void M2() {
      \\code
     }
  }
}

【问题讨论】:

  • 您无法从嵌套的C2 访问C1.M1
  • 感觉设计不好(无意冒犯)。你到底想做什么?
  • 所以子类不能访问父类的字段和方法?
  • 它实际上不是“父母”。 C2 只是位于 C1 内部,但它们之间没有任何关系。
  • 您不能在M1 中定义C2。您只能在C1 中定义C2,紧邻M1

标签: c# inheritance nested inner-classes


【解决方案1】:

您的初始示例在语法上不正确:

class C1 {
  protected void M1() {
    \\code
  class C2 {
  private void M2() {
      \\code
     }
  }
}

您不能在M1 方法中定义C2 类。


您在 cmets 中提出的另一个问题(改述):

为什么我们需要嵌套类?

a 唯一能想到的就是这种情况:

    public class C1
    {
        public void M1()
        {
            Console.WriteLine($"{this.GetType()}.M1()");

            var c2 = new C2();
            c2.M2();
        }

        private class C2
        {
            public void M2()
            {
                Console.WriteLine($"{this.GetType()}.M2()");
            }
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            var c1 = new C1();
            c1.M1();
        }
    }

输出:

ClassesExample.C1.M1() 类Example.C1+C2.M2()

我们有一个私有的C2 类,只能从C1 内部访问。我不知道我为什么要这样做。但如果真的需要,那就是嵌套类的用法。

【讨论】:

    猜你喜欢
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 2020-09-28
    • 2018-09-10
    相关资源
    最近更新 更多