Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Вложенные классы в C#: определение, использование и наследование

Понимание вложенных классов в C#

Изучите, как определять, получать доступ и наследовать вложенные классы в C# на практических примерах, демонстрирующих лучшие практики.

В C# класс может быть объявлен внутри другого класса. Внутренний тип называется вложенным классом. Например:

class OuterClass {
    // ... члены внешнего класса
    class InnerClass {
        // ... члены внутреннего класса
    }
}

Этот пример создает InnerClass внутри OuterClass. Внутренний тип виден только внутри внешнего типа, если его модификатор доступа не позволяет иное.


Доступ к членам вложенного класса

Для работы с вложенными типами сначала создайте экземпляры каждого класса отдельно.

1. Создание экземпляра внешнего класса

OuterClass outer = new OuterClass();

Здесь outer — объект OuterClass.

2. Создание экземпляра вложенного класса

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

Поскольку InnerClass вложен в OuterClass, его нужно квалифицировать именем внешнего типа.

После создания экземпляров можно вызывать члены через ссылки на объекты.

Пример: Вложенный класс с методами

using System;
namespace NestedClassDemo {
    public class Car {
        public void DisplayCar() => Console.WriteLine("Car: Bugatti");
        public class Engine {
            public void DisplayEngine() => Console.WriteLine("Engine: Petrol Engine");
        }
    }
    class Program {
        static void Main(string[] args) {
            Car sportsCar = new Car();
            sportsCar.DisplayCar();
            Car.Engine petrolEngine = new Car.Engine();
            petrolEngine.DisplayEngine();
            Console.ReadLine();
        }
    }
}

Вывод

Car: Bugatti
Engine: Petrol Engine

Пример показывает создание объектов внешнего Car и вложенного Engine и вызов их методов.

Обратите внимание: нельзя вызвать метод вложенного типа напрямую от экземпляра внешнего:

// Неверно
sportsCar.DisplayEngine();

Доступ к членам внешнего класса из вложенного класса

Вложенные классы могут ссылаться на члены содержащего их типа. Можно использовать экземпляр внешнего типа или имя внешнего типа для статических членов.

Использование экземпляра для доступа к членам экземпляра

using System;
namespace NestedClassDemo {
    public class Car {
        public string Brand = "Bugatti";
        public class Engine {
            public void ShowBrand() {
                Car car = new Car();
                Console.WriteLine("Brand: " + car.Brand);
            }
        }
    }
    class Program {
        static void Main(string[] args) {
            Car.Engine engine = new Car.Engine();
            engine.ShowBrand();
            Console.ReadLine();
        }
    }
}

Вывод

Brand: Bugatti

Доступ к статическим членам без инстанцирования

using System;
namespace NestedClassDemo {
    public class Car {
        public static string Brand = "Bugatti";
        public class Engine {
            public void ShowBrand() {
                Console.WriteLine("Brand: " + Car.Brand);
            }
        }
    }
    class Program {
        static void Main(string[] args) {
            Car.Engine engine = new Car.Engine();
            engine.ShowBrand();
            Console.ReadLine();
        }
    }
}

Вывод

Brand: Bugatti

Наследование с участием вложенных классов

Вложенные классы могут участвовать в наследовании как любые другие типы.

Наследование класса от внешнего класса

using System;
namespace NestedClassDemo {
    class Computer {
        public void Display() => Console.WriteLine("Method of Computer class");
        public class CPU {
            // Дополнительные члены можно добавить здесь
        }
    }
    class Laptop : Computer {
        // Laptop наследует все члены Computer
    }
    class Program {
        static void Main(string[] args) {
            Laptop laptop = new Laptop();
            laptop.Display();
            Console.ReadLine();
        }
    }
}

Вывод

Method of Computer class

Наследование класса от вложенного класса

using System;
namespace NestedClassDemo {
    class Computer {
        public class CPU {
            public void Display() => Console.WriteLine("Method of CPU class");
        }
    }
    class Laptop : Computer.CPU {
        // Laptop наследует члены Computer.CPU
    }
    class Program {
        static void Main(string[] args) {
            Laptop laptop = new Laptop();
            laptop.Display();
            Console.ReadLine();
        }
    }
}

Вывод

Method of CPU class

При наследовании вложенного класса необходимо квалифицировать тип именем внешнего класса, например Computer.CPU.

Язык C

  1. Классы и объекты в C#: Фундаменты надёжного ООП
  2. Модификаторы доступа в C#: public, private, protected, internal и другие
  3. Конструкторы в C#: виды, примеры и продвинутые паттерны
  4. Ключевое слово static в C#: статические переменные, методы и классы
  5. Абстрактные классы и методы в C#: практическое руководство
  6. Вложенные классы в C#: определение, использование и наследование
  7. Частичные классы и методы в C#: понимание и применение
  8. Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
  9. Освоение перегрузки конструкторов в C#
  10. Полиморфизм в C++: практическое руководство