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
- C# Classes & Objects: Fundamenten voor Robuuste OOP
- C# Access Modifiers: Public, Private, Protected, Internal en Meer
- C# Constructors: Types, Voorbeelden en Geavanceerde Patronen
- C# Static Keyword: Static Variabelen, Methodes en Classes Beheersen
- C# Abstract Classes & Methods: Een Praktische Gids
- C# Geneste Classes: Definitie, Gebruik en Inheritance
- C# Partial Classes en Methods: Een Praktische Gids
- C# Sealed Classes en Methods: Wanneer en Hoe Te Gebruiken
- Constructor overloading in C#: flexibele klassen ontwerpen
- Polymorfisme in C++ Begrijpen: Een Praktische Gids
- Data Abstractie in C++ Beheersen: Ontwerp Vereenvoudigen met Interface-Implementatie Scheiding