C # - Vererbung
Eines der wichtigsten Konzepte in der objektorientierten Programmierung ist die Vererbung. Durch Vererbung können wir eine Klasse in Bezug auf eine andere Klasse definieren, was das Erstellen und Verwalten einer Anwendung erleichtert. Dies bietet auch die Möglichkeit, die Codefunktionalität wiederzuverwenden und die Implementierungszeit zu verkürzen.
Beim Erstellen einer Klasse kann der Programmierer festlegen, dass die neue Klasse die Mitglieder einer vorhandenen Klasse erben soll, anstatt vollständig neue Datenelemente und Elementfunktionen zu schreiben. Diese vorhandene Klasse heißtbase Klasse, und die neue Klasse wird als die bezeichnet derived Klasse.
Die Idee der Vererbung setzt die IS-ABeziehung. Zum Beispiel SäugetierIS A Tier, Hund IS-A Säugetier daher Hund IS-A Tier auch und so weiter.
Basis- und abgeleitete Klassen
Eine Klasse kann von mehr als einer Klasse oder Schnittstelle abgeleitet werden. Dies bedeutet, dass sie Daten und Funktionen von mehreren Basisklassen oder Schnittstellen erben kann.
Die in C # zum Erstellen abgeleiteter Klassen verwendete Syntax lautet wie folgt:
<acess-specifier> class <base_class> {
...
}
class <derived_class> : <base_class> {
...
}
Betrachten Sie eine Basisklasse Shape und ihre abgeleitete Klasse Rectangle -
using System;
namespace InheritanceApplication {
class Shape {
public void setWidth(int w) {
width = w;
}
public void setHeight(int h) {
height = h;
}
protected int width;
protected int height;
}
// Derived class
class Rectangle: Shape {
public int getArea() {
return (width * height);
}
}
class RectangleTester {
static void Main(string[] args) {
Rectangle Rect = new Rectangle();
Rect.setWidth(5);
Rect.setHeight(7);
// Print the area of the object.
Console.WriteLine("Total area: {0}", Rect.getArea());
Console.ReadKey();
}
}
}
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Total area: 35
Basisklasse initialisieren
Die abgeleitete Klasse erbt die Mitgliedsvariablen und Mitgliedsmethoden der Basisklasse. Daher sollte das Superklassenobjekt erstellt werden, bevor die Unterklasse erstellt wird. Anweisungen zur Superklasseninitialisierung können Sie in der Mitgliederinitialisierungsliste angeben.
Das folgende Programm demonstriert dies -
using System;
namespace RectangleApplication {
class Rectangle {
//member variables
protected double length;
protected double width;
public Rectangle(double l, double w) {
length = l;
width = w;
}
public double GetArea() {
return length * width;
}
public void Display() {
Console.WriteLine("Length: {0}", length);
Console.WriteLine("Width: {0}", width);
Console.WriteLine("Area: {0}", GetArea());
}
}//end class Rectangle
class Tabletop : Rectangle {
private double cost;
public Tabletop(double l, double w) : base(l, w) { }
public double GetCost() {
double cost;
cost = GetArea() * 70;
return cost;
}
public void Display() {
base.Display();
Console.WriteLine("Cost: {0}", GetCost());
}
}
class ExecuteRectangle {
static void Main(string[] args) {
Tabletop t = new Tabletop(4.5, 7.5);
t.Display();
Console.ReadLine();
}
}
}
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Length: 4.5
Width: 7.5
Area: 33.75
Cost: 2362.5
Mehrfachvererbung in C #
C# does not support multiple inheritance. Sie können jedoch Schnittstellen verwenden, um die Mehrfachvererbung zu implementieren. Das folgende Programm demonstriert dies -
using System;
namespace InheritanceApplication {
class Shape {
public void setWidth(int w) {
width = w;
}
public void setHeight(int h) {
height = h;
}
protected int width;
protected int height;
}
// Base class PaintCost
public interface PaintCost {
int getCost(int area);
}
// Derived class
class Rectangle : Shape, PaintCost {
public int getArea() {
return (width * height);
}
public int getCost(int area) {
return area * 70;
}
}
class RectangleTester {
static void Main(string[] args) {
Rectangle Rect = new Rectangle();
int area;
Rect.setWidth(5);
Rect.setHeight(7);
area = Rect.getArea();
// Print the area of the object.
Console.WriteLine("Total area: {0}", Rect.getArea());
Console.WriteLine("Total paint cost: ${0}" , Rect.getCost(area));
Console.ReadKey();
}
}
}
Wenn der obige Code kompiliert und ausgeführt wird, ergibt sich das folgende Ergebnis:
Total area: 35
Total paint cost: $2450