📜  C#中的嵌套类

📅  最后修改于: 2021-05-29 19:21:17             🧑  作者: Mango

类是用户定义的蓝图或原型,从中可以创建对象。基本上,一个类将字段和方法(定义动作的成员函数)组合到一个单元中。在C#中,允许用户在另一个类中定义一个类。这种类型的类称为嵌套类。此功能使用户可以对仅在一个地方使用的类进行逻辑分组,从而增加了封装的使用,并创建了更具可读性和可维护性的代码。

句法:

class Outer_class {

       // Code..

       class Inner_class {

          // Code.. 
       }
}

例子:

// C# program to illustrate the
// concept of nested class
using System;
  
// Outer class
public class Outer_class {
  
    // Method of outer class
    public void method1()
    {
        Console.WriteLine("Outer class method");
    }
  
    // Inner class
    public class Inner_class {
  
        // Method of inner class
        public void method2()
        {
            Console.WriteLine("Inner class Method");
        }
    }
}
  
// Driver Class
public class GFG {
  
    // Main method
    static public void Main()
    {
  
        // Create the instance of outer class
        Outer_class obj1 = new Outer_class();
        obj1.method1();
  
        // This statement gives an error because
        // you are not allowed to access inner 
        // class methods with outer class objects
        // obj1. method2();
  
        // Creating an instance of inner class
        Outer_class.Inner_class obj2 = 
                    new Outer_class.Inner_class();
  
        // Accessing the method of inner class
        obj2.method2();
    }
}

输出:

Outer class method
Inner class Method

要点:

  • 可以将嵌套类声明为private,public,protected,internal,protected internal或private protected
  • 如上例所示,不允许外部类直接访问内部类成员。
  • 您可以在外部类中创建内部类的对象。
  • 内部类可以访问外部类中声明的静态成员,如下例所示:

    例子:

    // C# program to illustrate the
    // concept of nested class accessing
    // static members of the outer class
    using System;
      
    // Outer class
    public class Outer_class {
      
        // Static data member of the outer class
        public static string str = "Geeksforgeeks";
      
        // Inner class
        public class Inner_class {
      
            // Static method of Inner class
            public static void method1()
            {
      
                // Displaying the value of a
                // static member of the outer class
                Console.WriteLine(Outer_class.str);
            }
        }
    }
      
    // Driver Class
    public class GFG {
      
        // Main method
        static public void Main()
        {
      
            // Accessing static method1 
            // of the inner class
            Outer_class.Inner_class.method1();
        }
    }
    

    输出 :

    Geeksforgeeks
  • 内部类可以访问外部类中声明的非静态成员,如以下示例所示:

    例子:

    // C# program to illustrate the
    // concept of nested class
    // accessing non-static member
    // of the outer class
    using System;
      
    // Outer class
    public class Outer_class {
      
        // Non-static data 
        // member of outer class
        public int number = 1000000;
      
        // Inner class
        public class Inner_class {
      
            // Static method of Inner class
            public static void method1()
            {
                // Creating the object of the outer class
                Outer_class obj = new Outer_class();
      
                // Displaying the value of a 
                // static member of the outer class
                // with the help of obj
                Console.WriteLine(obj.number);
            }
        }
    }
      
    // Driver Class
    public class GFG {
      
        // Main method
        static public void Main()
        {
      
            // Accessing static method1
            // of inner class
            Outer_class.Inner_class.method1();
        }
    }
    

    输出 :

    1000000
  • 实例内部类可以访问在外部类中声明的非静态成员,如以下示例所示:

    例子:

    // C# program to illustrate the
    // concept of nested class
    // accessing non-static member
    // of the outer class
    using System;
      
    // Outer class
    public class Outer_class {
      
        // Non-static data 
        // member of outer class
        public int number = 2000000;
      
        // Non-static reference to Inner_class
        // instance.
        public Inner_class Inner { get; set; }
      
        // Constructor to establish link between
        // instance of Outer_class to its 
        // instance of the Inner_class
        public Outer_class() {
            this.Inner = new Inner_class(this);
        }
      
        // Inner class
        private class Inner_class {
      
            // private field to hold
            // reference to an instance
            // of the Outer_class
            private Outer_class obj;
      
            // constructor that establishes
            // a reference to the Outer_class
            // to use within an Inner_cass instance
            public Inner_class(Outer_class outer) 
            {
                obj = outer;
            }
      
            // Method of Inner class
            public void method1()
            {
                // Displaying the value of a 
                // member of the outer class
                // with the help of obj
                Console.WriteLine(obj.number);
            }
        }
    }
      
    // Driver Class
    public class GFG {
      
        // Main method
        public void Main()
        {
            // Create instance of Outer_class
            Outer_class Outer = new Outer_class();
      
            // Accessing static method1
            // of inner class
            Outer.Inner.method1();
        }
    }
    

    输出 :

    2000000
  • 嵌套类的范围受其封闭类的范围限制。
  • 默认情况下,嵌套类是私有的。
  • 在C#中,允许用户将一个类(包括嵌套类)继承到另一个类中。

    例子:

    // C# program to illustrate the
    // concept inheritance
    using System;
      
    // Outer class
    public class Outer_class {
      
        // Method of outer class
        public void method1()
        {
            Console.WriteLine("Outer class method");
        }
      
        // Inner class
        public class Inner_class {
        }
    }
      
    // Derived class
    public class Exclass : Outer_class {
      
        // Method of derived class
        public void func()
        {
            Console.WriteLine("Method of derived class");
        }
    }
      
    // Driver Class 
    public class GFG {
      
        // Main method
        static public void Main()
        {
      
            // Creating object of 
            // the derived class
            Exclass obj = new Exclass();
            obj.func();
            obj.method1();
        }
    }
    

    输出 :

    Method of derived class
    Outer class method
    
  • 在C#中,允许用户从外部类继承嵌套类。