Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#嵌套类与无多态性的子类之间的差异_C#_Inheritance_Nested_Inner Classes - Fatal编程技术网

C#嵌套类与无多态性的子类之间的差异

C#嵌套类与无多态性的子类之间的差异,c#,inheritance,nested,inner-classes,C#,Inheritance,Nested,Inner Classes,假设C2是C1,我需要C2可以访问M1,C1不能访问M2。如果我不需要多态性,下面的代码是否会做与我在没有嵌套类的情况下做相同的事情,而是使用继承 class C1 { protected void M1() { \\code class C2 { private void M2() { \\code } } } 您最初的示例在语法上不正确: class C1 { protected void M1() { \\code class

假设C2是C1,我需要C2可以访问M1,C1不能访问M2。如果我不需要多态性,下面的代码是否会做与我在没有嵌套类的情况下做相同的事情,而是使用继承

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

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

class C1 {
  protected void M1() {
    \\code
  class C2 {
  private void M2() {
      \\code
     }
  }
}
不能在
M1
方法中定义
C2


您在评论中提出的另一个问题(重新措辞):

为什么我们需要嵌套类呢

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() ClassesExample.C1+C2.M2()


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

您不能从嵌套的
C2
访问
C1.M1
。感觉这是一个糟糕的设计(无意冒犯)。你到底想做什么?这样子类就不能访问父类的字段和方法?实际上它不是“父类”
C2
仅位于
C1
内部,但它们之间没有关系。您无法在
M1
内部定义
C2
。只能在
M1
旁边的
C1
中定义
C2