Csharp/CSharp Tutorial/Class/Class hierarchy
Содержание
A multilevel hierarchy.
<source lang="csharp">using System;
class Shape {
double pri_width; // private double pri_height; // private // Default constructor. public Shape() { width = height = 0.0; } // Constructor for Shape. public Shape(double w, double h) { width = w; height = h; } // Construct object with equal width and height. public Shape(double x) { width = height = x; } // Properties for width and height. public double width { get { return pri_width; } set { pri_width = value; } } public double height { get { return pri_height; } set { pri_height = value; } } public void showDim() { Console.WriteLine("Width and height are " + width + " and " + height); }
}
class Triangle : Shape {
string style; // private /* A default constructor. This invokes the default constructor of Shape. */ public Triangle() { style = "null"; } // Constructor public Triangle(string s, double w, double h) : base(w, h) { style = s; } // Construct an isosceles triangle. public Triangle(double x) : base(x) { style = "isosceles"; } // Return area of triangle. public double area() { return width * height / 2; } // Display a triangle"s style. public void showStyle() { Console.WriteLine("Triangle is " + style); }
}
class ColorTriangle : Triangle {
string color; public ColorTriangle(string c, string s, double w, double h) : base(s, w, h) { color = c; } // Display the color. public void showColor() { Console.WriteLine("Color is " + color); }
}
class MainClass {
public static void Main() { ColorTriangle t1 = new ColorTriangle("Blue", "right", 8.0, 12.0); ColorTriangle t2 = new ColorTriangle("Red", "isosceles", 2.0, 2.0); Console.WriteLine("Info for t1: "); t1.showStyle(); t1.showDim(); t1.showColor(); Console.WriteLine("Area is " + t1.area()); Console.WriteLine(); Console.WriteLine("Info for t2: "); t2.showStyle(); t2.showDim(); t2.showColor(); Console.WriteLine("Area is " + t2.area()); }
}</source>
Info for t1: Triangle is right Width and height are 8 and 12 Color is Blue Area is 48 Info for t2: Triangle is isosceles Width and height are 2 and 2 Color is Red Area is 2
A simple class hierarchy.
- A class that is inherited is called a base class.
- The inheriting class is called a derived class.
- A derived class is a specialized version of a base class.
- A derived class has all of the variables, methods, properties, operators, and indexers from the base class
- A derived class adds its own unique elements.
The general form of a class declaration that inherits a base class:
<source lang="csharp">class derived-class-name : base-class-name {
// body of class
}</source>
Demonstrate when constructors are called.
The general form of calling base constructor:
<source lang="csharp">derived-constructor(parameter-list) : base(arg-list) {
// body of constructor
}</source>
Inherited Implementation
<source lang="csharp">using System;
interface Interface1 {
void PrintOut(string s);
} class BaseClass {
public void PrintOut(string s) { Console.WriteLine("Calling through: {0}", s); }
} class Derived : BaseClass, Interface1 { } class MainClass {
static void Main() { Derived d = new Derived(); d.PrintOut("object."); }
}</source>
Calling through: object.
Simple Inheritance
<source lang="csharp">using System; class Employee {
public Employee(string name, float billingRate) { this.name = name; this.billingRate = billingRate; } public float CalculateCharge(float hours) { return(hours * billingRate); } public string TypeName() { return("Employee"); } private string name; protected float billingRate;
} class Manager: Employee {
public Manager(string name, float billingRate) : base(name, billingRate) { } public new float CalculateCharge(float hours) { if (hours < 1.0F) hours = 1.0F; return(hours * billingRate); } public new string TypeName() { return("Civil Employee"); }
} class Test {
public static void Main() { Employee e = new Employee("A", 15.50F); Manager c = new Manager("B", 40F); Console.WriteLine("{0} charge = {1}", e.TypeName(), e.CalculateCharge(2F)); Console.WriteLine("{0} charge = {1}", c.TypeName(), c.CalculateCharge(0.75F)); }
}</source>
Employee charge = 31 Civil Employee charge = 40