Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

C# Geneste Classes: Definitie, Gebruik en Inheritance

C# Geneste Classes Begrijpen

Ontdek hoe u geneste classes in C# definieert, benadert en erft met praktische voorbeelden die best practices demonstreren.

In C# kan een klasse binnen een andere klasse gedeclareerd worden. De innerlijke type heet een geneste klasse. Bijvoorbeeld:

class OuterClass {
    // ... outer leden
    class InnerClass {
        // ... inner leden
    }
}

Dit voorbeeld creëert InnerClass binnen OuterClass. De innerlijke type is alleen zichtbaar binnen de outer type tenzij de access modifier anders toestaat.


Geneste Klasse Leden Benaderen

Om met geneste typen te werken, instantieert u eerst elke klasse apart.

1. Een Instantie van de Outer Klasse Aanmaken

OuterClass outer = new OuterClass();

Hier is outer een object van OuterClass.

2. Een Instantie van de Geneste Klasse Aanmaken

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

Omdat InnerClass genest is binnen OuterClass, kwalificeert u het met de outer type naam.

Eenmaal geïnstantieerd, kunt u leden aanroepen via de objectreferentie.

Voorbeeld: Geneste Klasse met Methodes

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

Output

Auto: Bugatti
Motor: Benzine Motor

Het voorbeeld toont hoe u objecten aanmaakt van zowel de outer Car als de geneste Engine en hun methodes aanroept.

Let op dat u een geneste type's methode niet direct kunt aanroepen vanuit de outer instantie:

// Ongeldig
sportsCar.DisplayEngine();

Outer Klasse Leden Benaderen vanuit een Geneste Klasse

Geneste klassen kunnen leden van hun container type refereren. U kunt een instantie van de outer type gebruiken of de outer type naam voor static leden.

Een Instantie Gebruiken om Instantieleden te Benaderen

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

Output

Merk: Bugatti

Static Leden Benaderen Zonder Instantiëring

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

Output

Merk: Bugatti

Inheritance met Geneste Classes

Geneste klassen kunnen meedoen aan inheritance net als elk ander type.

Een Klasse Afleiden van een Outer Klasse

using System;
namespace NestedClassDemo {
    class Computer {
        public void Display() => Console.WriteLine("Methode van Computer klasse");
        public class CPU {
            // Extra leden kunnen hier toegevoegd worden
        }
    }
    class Laptop : Computer {
        // Laptop erft alle leden van Computer
    }
    class Program {
        static void Main(string[] args) {
            Laptop laptop = new Laptop();
            laptop.Display();
            Console.ReadLine();
        }
    }
}

Output

Methode van Computer klasse

Een Klasse Afleiden van een Geneste Klasse

using System;
namespace NestedClassDemo {
    class Computer {
        public class CPU {
            public void Display() => Console.WriteLine("Methode van CPU klasse");
        }
    }
    class Laptop : Computer.CPU {
        // Laptop erft leden van Computer.CPU
    }
    class Program {
        static void Main(string[] args) {
            Laptop laptop = new Laptop();
            laptop.Display();
            Console.ReadLine();
        }
    }
}

Output

Methode van CPU klasse

Bij het erven van een geneste klasse moet u het type kwalificeren met de outer klasse naam, bv. Computer.CPU.

C Taal

  1. C# Classes & Objects: Fundamenten voor Robuuste OOP
  2. C# Access Modifiers: Public, Private, Protected, Internal en Meer
  3. C# Constructors: Types, Voorbeelden en Geavanceerde Patronen
  4. C# Static Keyword: Static Variabelen, Methodes en Classes Beheersen
  5. C# Abstract Classes & Methods: Een Praktische Gids
  6. C# Geneste Classes: Definitie, Gebruik en Inheritance
  7. C# Partial Classes en Methods: Een Praktische Gids
  8. C# Sealed Classes en Methods: Wanneer en Hoe Te Gebruiken
  9. Constructor overloading in C#: flexibele klassen ontwerpen
  10. Polymorfisme in C++ Begrijpen: Een Praktische Gids
  11. Data Abstractie in C++ Beheersen: Ontwerp Vereenvoudigen met Interface-Implementatie Scheiding