C# 嵌套类

在 C# 中,我们可以在一个类里面定义另一个类。这被称为嵌套类。例如:

class OuterClass {
  ...
  class InnerClass {
    ...
  }
}

这里,我们在 `OuterClass` 类中创建了 `InnerClass` 类。`InnerClass` 被称为嵌套类。


访问成员

要访问嵌套类的成员,我们首先需要创建它们的实例(对象)。

1. 创建外部类的实例

OuterClass obj1 = new OuterClass();

这里,我们创建了 `OuterClass` 类的 `obj1` 实例。

2. 创建内部类的实例

OuterClass.InnerClass obj2 = new OuterClass.InnerClass();

您可以看到,我们使用了 `OuterClass.InnerClass` 来创建内部类 `obj2` 实例。这是因为 `InnerClass` 是 `OuterClass` 的嵌套类。

一旦我们创建了各个类的实例,我们就可以使用实例名称和点运算符来访问每个类的成员。

示例:C# 嵌套类

using System;
namespace CsharpNestedClass {
 
  // outer class
  public class Car {

    public void displayCar() {
      Console.WriteLine("Car: Bugatti");
    }
 
    // inner class
public class Engine { public void displayEngine() { Console.WriteLine("Engine: Petrol Engine"); }
} } class Program { static void Main(string[] args) { // create object of outer class Car sportsCar = new Car(); // access method of outer class
sportsCar.displayCar();
// create object of inner class Car.Engine petrolEngine = new Car.Engine(); // access member of inner class
petrolEngine.displayEngine();
Console.ReadLine(); } } }

输出

Car: Bugatti
Engine: Petrol Engine

在上面的程序中,我们将 `Engine` 类嵌套在了 `Car` 类中。

在 `Program` 类中,我们创建了外部类和内部类的实例。

// object of outer class
Car sportsCar = new Car();

// object of nested class
Car.Engine petrolEngine = new Car.Engine();

然后,我们使用这些实例来访问每个类的方法。

  • `sportsCar.displayCar()` - 使用 `Car` 的实例访问外部类的方法
  • `petrolEngine.displayEngine()` - 使用 `Engine` 的实例访问内部类的方法

注意:我们不能使用外部类的实例来访问内部类的成员。例如:

// error code
sportsCar.displayEngine();

这里,我们不能使用外部类 `sportsCar` 的实例来访问内部类 `Engine` 的 `displayEngine()` 方法。


在内部类中访问外部类的成员

我们可以在内部类中访问外部类的成员。为此,我们使用外部类的实例。例如:

using System;
namespace CsharpNestedClass {

  // outer class
  public class Car {
 
    public string brand = "Bugatti";

    // nested  class
    public class Engine {
      public void displayCar() {

        // object of outer class
Car sportsCar = new Car(); Console.WriteLine("Brand: " + sportsCar.brand);
} } } class Program { static void Main(string[] args) { // object of inner class Car.Engine engineObj = new Car.Engine(); engineObj.displayCar(); Console.ReadLine(); } } }

输出

Brand: Bugatti

在上面的示例中,我们将 `Engine` 类嵌套在了 `Car` 类中。请注意这一行:

// inside Engine class
Car sportsCar = new Car();
Console.WriteLine("Brand: " + sportsCar.brand);

这里,我们使用了 `Car` 类的实例来访问字段 `brand`。


在内部类中访问外部类的静态成员

如果我们需要访问外部类的静态成员,则无需创建其实例。而是可以直接使用外部类的名称。例如:

using System;
namespace CsharpNestedClass {

  // outer class
  public class Car {
    //static member of outer class
public static string brand = "Bugatti";
// nested class public class Engine { public void display() { // access static member of outer class
Console.WriteLine("Brand: " + Car.brand);
} } } class Program { static void Main(string[] args) { // object of inner class Car.Engine obj = new Car.Engine(); obj.display(); Console.ReadLine(); } } }

输出

Brand: Bugatti

在上面的示例中,我们将 `Engine` 类嵌套在了 `Car` 类中。`Car` 类有一个静态字段 `brand`。

这里,我们在内部类(`Engine`)中通过外部类的名称(`Car`)访问了静态字段 `brand`。

Console.WriteLine("Brand: " + Car.brand);

继承外部类

与普通类一样,我们也可以继承外部类。例如:

using System;
namespace CsharpNestedClass {
 
  // outer class
  class Computer {

    public void display() {
      Console.WriteLine("Method of Computer class");
    }
 
    // nested class
    public class CPU {
 
    }
   }

class Laptop : Computer { }
class Program { static void Main(string[] args) { // object of derived class Laptop obj = new Laptop(); obj.display(); Console.ReadLine(); } } }

输出

Method of Computer class

在上面的示例中,我们从外部类 `Computer` 派生了 `Laptop` 类。

因此,我们能够使用 `Laptop` 类的实例来访问 `Computer` 类的 `display()` 方法。


继承内部类

在 C# 中,我们也可以继承内部类。例如:

using System;
namespace CsharpNestedClass {

  // outer class
  class Computer {

    // nested  class
    public class CPU {
      public void display() {
        Console.WriteLine("Method of CPU class");
      }

    }
  }
    
// inheriting inner class class Laptop : Computer.CPU { }
class Program { static void Main(string[] args) { // object of derived class Laptop obj = new Laptop(); obj.display(); Console.ReadLine(); } } }

输出

Method of CPU class

在上面的示例中,我们从内部类 `CPU` 派生了 `Laptop` 类。

请注意,我们使用了外部类的名称以及嵌套类来继承内部类。

class Laptop : Computer.CPU {}
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战