C# geneste klasse
C# geneste klasse
In deze tutorial leer je over de geneste klasse in C# aan de hand van voorbeelden.
In C# kunnen we een klasse binnen een andere klasse definiëren. Het staat bekend als een geneste klasse. Bijvoorbeeld,
class OuterClass {
...
class InnerClass {
...
}
}
Hier hebben we de klasse InnerClass
gemaakt binnen de klas OuterClass
. De InnerClass
wordt de geneste klasse genoemd.
Toegangsleden
Om toegang te krijgen tot leden van de geneste klassen, moeten we eerst hun objecten maken.
1.Maak object van de buitenste klasse
OuterClass obj1 = new OuterClass();
Hier hebben we de obj1 . gemaakt object van de klasse OuterClass
.
OuterClass.InnerClass obj2 = new OuterClass.InnerClass();
Je kunt zien dat we OuterClass.InnerClass
. hebben gebruikt om de obj2 . te maken object van de innerlijke klasse. Dit komt omdat InnerClass
is de geneste klasse van OuterClass
.
Nadat we het object van individuele klassen hebben gemaakt, kunnen we de objectnaam en puntoperator gebruiken om toegang te krijgen tot leden van elke klasse.
Voorbeeld:C# geneste klasse
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();
}
}
}
Uitvoer
Car: Bugatti Engine: Petrol Engine
In het bovenstaande programma hebben we de Engine
. genest klasse binnen de Car
klasse.
Binnen de Program
class, we hebben objecten gemaakt van zowel de outer class als de inner class.
// object of outer class
Car sportsCar = new Car();
// object of nested class
Car.Engine petrolEngine = new Car.Engine();
Vervolgens hebben we deze objecten gebruikt om toegang te krijgen tot methoden van elke klasse.
sportsCar.displayCar()
- toegang krijgen tot de buitenste klasse-methode met behulp van het object vanCar
petrolEngine.displayEngine()
- toegang krijgen tot de innerlijke klasse-methode met behulp van het object vanEngine
Opmerking :We hebben geen toegang tot de leden van de innerlijke klasse met behulp van het object van de buitenste klasse. Bijvoorbeeld
// error code
sportsCar.displayEngine();
Hier hebben we geen toegang tot de displayEngine()
methode van de innerlijke klasse Engine
met behulp van de sportwagen object van de buitenste klasse.
Toegang tot leden van de buitenste klas binnen de binnenste klas
We hebben toegang tot leden van de buitenste klasse binnen de binnenste klasse. Hiervoor gebruiken we een object van de outer class. Bijvoorbeeld
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();
}
}
}
Uitvoer
Brand: Bugatti
In het bovenstaande voorbeeld hebben we de Engine
. genest klasse binnen de Car
klas. Let op de lijn,
// inside Engine class
Car sportsCar = new Car();
Console.WriteLine("Brand: " + sportsCar.brand);
Hier hebben we het object van de klasse Car
. gebruikt om toegang te krijgen tot veld merk .
Toegang tot statische leden van Outer Class Inside Inner Class
Als we toegang moeten hebben tot statische leden van de buitenste klasse, hoeven we het object niet te maken. In plaats daarvan kunnen we direct de naam van de buitenste klasse gebruiken. Bijvoorbeeld,
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();
}
}
}
Uitvoer
Brand: Bugatti
In het bovenstaande voorbeeld hebben we de Engine
. genest klasse binnen de Car
klas. Car
heeft een statisch veld merk .
Hier hebben we toegang gekregen tot het statische veld brand binnen de innerlijke klasse (Engine
) met de naam van de buitenste klasse (Car
).
Console.WriteLine("Brand: " + Car.brand);
Buitenklasse overerven
Net als een gewone klasse kunnen we ook de buitenste klasse erven. Bijvoorbeeld,
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();
}
}
}
Uitvoer
Method of Computer class
In het bovenstaande voorbeeld hebben we de klasse Laptop
. afgeleid uit de buitenklasse Computer
.
Hierdoor hebben we toegang tot de display()
methode van klasse Computer
met behulp van het object van de klasse Laptop
.
Innerlijke klasse overerven
In C# kunnen we ook de innerlijke klasse erven. Bijvoorbeeld,
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();
}
}
}
Uitvoer
Method of CPU class
In het bovenstaande voorbeeld hebben we de Laptop
. afgeleid klasse uit de innerlijke klasse CPU
.
Merk op dat we de naam van de buitenste klasse samen met de geneste klasse hebben gebruikt om de binnenste klasse te erven.
class Laptop : Computer.CPU {}
C Taal